2016-07-23 18 views
0

Ich habe ein kleines Problem mit den Knöpfen auf einem tableview.tableviewcell sich wiederholende uibuttons

Ich habe eine TableViewCell, die ich mit 3 Tasten angepasst habe. Ich habe die Schaltflächen im Interface Builder ausgeblendet und wenn die Tabelle geladen wird, sind die Schaltflächen wie erwartet ausgeblendet.

Ich habe dann die versteckte Eigenschaft der Tabelle auf false gesetzt, wenn didSelectRow aufgerufen wird und hidden.true, wenn didDeselectRow aufgerufen wird. Das funktioniert auch gut. Das Problem ist, dass die Schaltflächen, die in didSelectRow sichtbar sind, auch alle sieben Zellen sichtbar sind. sie wiederholen sich immer wieder.

Unten finden Sie den Code, der die Tasten

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell 

      print("Table selected") 

       cell.insertEmailButton.hidden = false 
       cell.insertPhoneButton.hidden = false 
       cell.insertAllButton.hidden = false 
       cell.contactTextLabel.alpha = 0.2 
       cell.contactDetailTextLabel.alpha = 0.2 
     } 

Und das versteckt sie zeigt, wenn die tableViewCell

abgewählt
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell 

     cell.insertEmailButton.hidden = true 
     cell.insertPhoneButton.hidden = true 
     cell.insertAllButton.hidden = true 
     cell.contactTextLabel.alpha = 1.0 
     cell.contactDetailTextLabel.alpha = 1.0 
    } 

Ich habe einige Nachforschungen und ich lernte es könnte die Zeile mit den Tasten sein .hidden set to false wird von der Tabellenansicht wiederverwendet. Aber ich verstehe aus der Dokumentation, dass die Zelle, die wiederverwendet wird, stammt aus CellForRowAtIndexPath und nicht die Zelle bei didSelectRow, wo ich die Schaltfläche.hidden auf false setzt.

Ich habe auch versucht, mit der cell.isSelected-Eigenschaft in einer if else-Anweisung im cellForRowAtIndexPath die Schaltflächen auszublenden und anzuzeigen, aber die Schaltflächen werden überhaupt nicht angezeigt.

Vielen Dank im Voraus für Ihre Hilfe

Antwort

0

Der Tableview der Ansicht der Zelle wieder verwendet, wenn die Tabelle gescrollt wird, um Speicherplatz zu sparen. Wenn Sie zum Beispiel die Schaltfläche auf visible (innerhalb von didSelectRow) setzen und dann in der Tabelle nach unten scrollen, nimmt die Tabellenansicht die Zellen, die oben aus dem sichtbaren Bildschirm verschwinden und sie unten wiederverwenden, um die Overhead der Schaffung neuer Zellen, Verbesserung der Leistung.

Aus diesem Grund wiederholen sich Ihre vorherigen Eigenschaften auf den Zellen.

Um die gewünschte versteckte Taste auf gescrollt Zellen, ich empfehlen, in

tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
auf true/false button.hidden

Diese auf den Knopf versteckt, sobald eine neue Zeile in den sichtbaren Anzeigebereich gescrollt wird eingestellt wird .

Hoffe, das hilft.

+0

Danke. Ich habe benutzt, wenn Zelle.isSelected im cellForRowAtIndexPath, um die ausgeblendeten Eigenschaften der Schaltfläche "true" und "false" zu setzen, aber die Schaltflächen wurden überhaupt nicht angezeigt. –

+0

Können Sie ein bisschen mehr Informationen über Ihre gewünschten Ergebnisse geben? –

+0

Es ist nichts kompliziert. Ich möchte nur eine Tabellenansicht mit Kontakten und wenn eine Zelle angetippt wird, verblassen der Titel und der Untertitel und die 3 Knöpfe erscheinen. und wenn eine andere Zelle ausgewählt wird, kehrt die Anfangszelle zu ihrem Alpha zurück und blendet die Knöpfe aus, während die neu ausgewählte Zelle den Knopf anzeigt und die Titel verbläßt. –

0

Ich löste die wiederkehrenden Schaltflächen durch Ausblenden, wenn ich überprüfe, ob die Zelle in CellForRowAtIndexPath deaktiviert ist. Dies bedeutet auch, dass jede Zelle, die ich auswähle, ihren ausgewählten Status verliert und Schaltflächen verschwinden, wenn sie die Ansicht verlassen. Ich kann damit leben.

if cell.selected == false{ 
     cell.emailButton.hidden = true 
     cell.phoneButton.hidden = true 
     cell.allButton.hidden = true 
    } 
0

UITableView verwendet seine Zelle erneut, um die Leistung zu verbessern. Also, du kannst nicht so wie du es versuchst. Was wir zu tun haben, ist wie andere Tabellenansichtszelleninformationen, z. Titel, Beschreibung, thumb image usw. Wir müssen auch den Zustand für Buttons im Array speichern. Wenn Sie eine Schaltfläche für die Zelle ausblenden möchten, nehmen Sie das Objekt im Index vom Array und ändern Sie den Schaltflächenstatus für die Schaltfläche und laden Sie diese Tabellenansichtszelle neu. Sollten Sie dennoch Probleme haben oder sich schwer verstehen fühlen, wenden Sie sich bitte an uns.

Verwandte Themen