2016-04-10 5 views
3

Ich habe vor kurzem begonnen, iOS-Entwicklung zu lernen, und ich stieß auf einige Probleme.Wie zeigt man die benutzerdefinierte Ansicht in UITableviewCell, wenn die Taste gedrückt wird?

Ich habe eine Tabellenansicht mit benutzerdefinierten Zelle: Label, Bildansicht (standardmäßig ausgeblendet) und eine Schaltfläche. Ich möchte, dass es so funktioniert, dass wenn die Schaltfläche für die Zelle angeklickt wird, die Bildansicht angezeigt wird. Das Problem ist, dass bei jeder Wiederverwendung der Zelle die Bildansicht für die wiederverwendete Zelle angezeigt wird. Ich möchte es zu arbeiten, so dass, wenn die Taste für die erste Zelle gedrückt wird, nur die erste Zellen Bildansicht angezeigt wird. Wenn die Schaltfläche für die erste und dritte Zelle gedrückt wird, sollte die Bildansicht NUR für die erste und dritte Zeile und nicht für eine andere Zeile angezeigt werden.

Meine aktuelle Lösung:

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 
     } 
    } 
} 

Und für den View-Controller:

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() 
} 

Vorschläge, wie dies zu schaffen, dass das Bild nicht sichtbar wird, wenn die Zelle wiederverwendet wird?

+0

So anpassen, wenn Sie auf die Schaltfläche tippen, wird die Bildansicht auf allen 30 Zellen zeigt nach oben? –

+0

Nein. Momentan, wenn ich auf den Knopf für die erste Zelle tippe, erscheint die Bildansicht für die folgenden Zellen: 1, 6, 11, 16, 21 und 26. Ich nehme an, dass es wegen Zelle 6, 11, 16, 21 ist und 26 wiederverwendet die Zelle 1, wenn dequeueReusableCellWithIdentifier – user3489053

+0

ich sehe aufgerufen wird. Können Sie zuerst die spezifische Zelle [indexPath.row] und dann das Bild für diese Zelle einblenden? –

Antwort

1

, wenn Sie den cellImageview.hidden Status speichern haben Sie es wie so:

add-Protokoll das Mainclass zu informieren, dass der actionButton gedrückt wird:

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

als in Ihrem CustomTableViewCell erklären

var delegate: customCellDelegate? 

und in der @IBAction func showImageViewAction(sender: UIButton) hinzufügen:

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

in Ihrem Mainview macht es zu 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

Aber in diesem Fall, wenn ich bis zum Ende der Tabellenansicht blättern und dann zurückrollen, wird der Status der Bildansicht nicht gespeichert. So wird es wieder versteckt. Ich muss irgendwo den Status der Bildansicht für die Zelle speichern. – user3489053

+0

Ich habe meinen Beitrag mit einem funktionierenden (getesteten) Code aktualisiert. Lass mich wissen, wenn du etwas anderes brauchst. –

+0

Danke. Das funktioniert wie ein Zauber. Noch besser als meine aktuelle Lösung, die Rückrufe verwendet. – user3489053

Verwandte Themen