2016-04-10 21 views
3

Kısa bir süre önce iOS geliştirmeyi öğrenmeye başladım ve bazı sorunlara rastladım. Etiket, (varsayılan olarak gizlidir) görüntü görünümü ve bir düğmeye:Düğmeye basıldığında UITableviewCell'de özel görünüm nasıl görüntülenir?

Özel bir hücre ile tableView var. Çalıştırılmasını istiyorum, böylece hücre için düğmeye tıklandığında görüntü görüntüsü gösterilir. Sorun, hücre her yeniden kullanıldığında, yeniden görüntülenen hücre için resim görünümü gösterilir. İlk hücreye basıldığında, SADECE ilk hücrelerin görüntü görünümünün gösterilmesi için çalışmasını sağlamak istiyorum. Birinci ve üçüncü hücreye basıldığında, görüntü görünümü SADECE ilk ve üçüncü sıra için ve diğer satırlarda gösterilmemelidir.

Benim şimdiki çözüm:

class CustomTableViewCell: UITableViewCell { 

    @IBOutlet var cellTitleLabel: UILabel! 
    @IBOutlet var cellImageView: UIImageView! 
    var showImageView = false 


    @IBAction func showImageViewAction(sender: UIButton) { 
     showImageView = true 
     displayCell() 
    } 

    func displayCell() { 
     if showImageView { 
      cellImageView.hidden = false 
     } else { 
      cellImageView.hidden = true 
     } 
    } 
} 

Ve görünümü denetleyicisi için

:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 30 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomTableViewCell 

    return cell 
} 

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    let customCell = cell as! CustomTableViewCell 
    customCell.displayCell() 
} 

hücre yeniden kullanılacağı zaman resim görünümü gizli alır, böylece nasıl oluşturulacağı hakkında herhangi bir öneriniz? actionButton basıldığında o MainClass bilgilendirmek

eklenti protokolünü: Eğer cellImageview.hidden durumunu kaydetmek varsa

+0

uygun yapmak? İlk hücre için düğmeye dokunun halinde –

+0

sayılı Şu anda, resim görünümü aşağıdaki hücreler için göstermektedir: 1, 6, 11, 16, 21 ve 26. Ben bir o olduğunu varsayarak, çünkü 21 hücre 6, 11, 16 ve 26, dequeueReusableCellWithIdentifier öğesinin görüldüğü sırada – user3489053

+0

göründüğü sırada 1 hücresini yeniden kullanır. İlk önce belirli bir hücreyi [indexPath.row] 'ı alabilir ve ardından o hücreye ait görüntüyü gizleyebilir misiniz? arasında –

cevap

1

sadece bu yüzden sevmiyorum

sizin CustomTableViewCell daha
protocol customCellDelegate{ 
    func actionButtonDidPressed(tag: Int, value: Bool) 
} 

var delegate: customCellDelegate? 
beyan

ve @IBAction func showImageViewAction(sender: UIButton) eklemedeki:

senin Mainview içinde
@IBAction func showImageViewAction(sender: UIButton) { 
    cellImageView.hidden = ! cellImageView.hidden 
    delegate?.actionButtonDidPressed(self.tag, value: imageCell.hidden) 
} 

o düğmeye dokunduğunuzda Dolayısıyla resim görünümü, tüm 30 hücreleri üzerinde gösterir customCellDelegate

var status = [Bool]() 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let rowCount = 100 
    for _ in 0 ..< rowCount{ 
     status.append(true) 
    } 
    return rowCount 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! customcell 
    cell. cellImageView.hidden = true 
    cell. cellImageView.hidden = status[indexPath.row] 
    cell.delegate = self 
    cell.tag = indexPath.row 

    return cell 
} 

func actionButtonDidPressed(tag: Int, value: Bool) { 
    status[tag] = value 
} 
+0

Ancak bu durumda tablo görünümünün sonuna kadar kaydırdığımda ve ardından geri kaydırıldığında görüntü görünümü durumu kaydedilmez. Böylece tekrar gizlenir. Hücrenin görüntü görüntüsünün durumunu bir yere kaydetmem gerekiyor. – user3489053

+0

i çalışma ile benim yazı güncelledik (test) kodu Başka bir şey –

+0

Teşekkür gerekiyorsa bana bildirin. Bu bir çekicilik gibi çalışır. Mevcut çözümümden bile daha iyi geri dönüşler. – user3489053

İlgili konular