2016-08-23 4 views
0

Wie kann ich die Interaktion mit allen cells mit Ausnahme der ausgewählten inaktivieren, und aktivieren Sie die Interaktion, nachdem Zelle wieder ausgewählt ist?So deaktivieren Sie alle Zellen außer der ausgewählten

Ich habe versucht, wie diese innerhalb didSelectRowAtIndexPath Methode:

if cell.isExpanded 
    { 
     UIView.animateWithDuration(0.3) { 
      cell.contentView.layoutIfNeeded() 
      self.tableView.userInteractionEnabled = false 
      cell.userInteractionEnabled = true 
     } 
    } 

Aber das wird die gesamte tableView einschließlich der aktuell ausgewählten cell deaktivieren.

+0

Haben Sie Delegatmethoden für Tabellenansicht gelesen? – Desdenova

+0

Welchen schlagen Sie vor, um es zu erledigen? – DCDC

+0

Der, der die Zellenauswahl deaktiviert. – Desdenova

Antwort

0

Verwenden

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

die ausgewählte Zelle und speichern die indexPath in einer Variablen und laden die tableview ausgewählt findout.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

Deaktivieren Sie alle Zellen außer der ausgewählten, indem Sie den gespeicherten IndexPath überprüfen.

Hoffe, das hilft.

3

Als erstes muss Ihre tableView Zelle auswählen, nachdem eine der Zellen ausgewählt ist, die andere Zelle außer der ausgewählten Zelle nicht auswählen soll. Dazu können Sie eine Instanzeigenschaft des Typs NSIndexPath erstellen und diese zum Speichern verwenden innerhalb didSelectRowAtIndexPath, und vergleichen Sie ihren Wert innerhalb cellForRowAtIndexPath wie dieser Weg.

var selectedIndexPath: NSIndexPath? 

cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! CustomCell 
    if (self.selectedIndexpath != nil) { 
     if self.selectedIndexpath == indexPath { 
      cell.userInteractionEnabled = true 
     } 
     else { 
      cell.userInteractionEnabled = false 
     } 
    } 
    else { 
     cell.userInteractionEnabled = true 
    } 
    return cell 
} 

DidSelectRowAtIndexPath

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if self.selectedIndexpath != indexPath { 
     self.selectedIndexpath = indexPath 
    } 
    else { 
     self.selectedIndexpath = nil 
    } 
    tableView.reloadData() 
} 

Hinweis: ich die Zelle userInteractionEnabled auf true wieder eingestellt haben, wenn Sie Ihre erweiterten Zelle auswählen.

+0

Versucht, das funktioniert in meinem Fall nicht, da Dieses frühe Daten Reload vermasselte meine Zellen – DCDC

+0

Etwas ohne neustaring TableView sollte meiner Meinung nach funktionieren – DCDC

+0

@DCDC Ich glaube nicht, ohne neu zu laden ist es möglich, weil Sie wollen, dass andere Zellen deaktiviert werden. –

Verwandte Themen