2016-07-02 9 views
0

hat Ich habe eine TabelleView mit mehreren Abschnitt und jeder Abschnitt enthält nur eine Zelle (das wird getan, um eine Lücke zwischen jeder Zelle zu erstellen). Ich versuche, eine benutzerdefinierte Auswahlansicht für meine Zelle zu erstellen, wenn sie ausgewählt ist. Wenn ich eine Zeile auswähle, wird die benutzerdefinierte Auswahlansicht zu mehr als einer Zelle hinzugefügt. Ich weiß, dass das Problem darin besteht, dass Zellen wiederverwendet werden. Was ist die beste Lösung, um dieses Problem zu lösen?didSelectRowAtIndexPath mit einer tableView, die Abschnitte

Dies ist mein Code.

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if let myCell = tableView.cellForRowAtIndexPath(indexPath) as? PredefinedServicesCell{ 
      let selectionView = UIView() 
      selectionView.backgroundColor = UIColor(hex: 0x3399CC).colorWithAlphaComponent(0.2) 
      selectionView.layer.cornerRadius = (myCell.containerView.layer.cornerRadius) 
      selectionView.frame = (myCell.containerView.frame) 
      myCell.containerView.addSubview(selectionView) 
     } 
    } 
+0

Pflegen Sie die entsprechenden Parameter im ** ** Modell (Datenquellen-Array) und legen Sie die Tabelle ** Ansicht ** bei gegebenem Indexpfad entsprechend. Fügen Sie zum Beispiel eine boolesche Eigenschaft 'selected' hinzu und fügen Sie die Unteransicht in der Delegate-Methode' tableView: cellForRowAtIndexPath hinzu oder entfernen Sie sie: ' – vadian

+0

Warum setzen Sie nicht einfach die backgroundColor der Zelle, anstatt eine andere Ansicht hinzuzufügen? – penatheboss

+0

Überprüfen Sie in cellForRowAtIndexPath, nachdem Sie die Zelle aus der Wiederverwendung abgerufen haben, ob sie nicht ausgewählt ist. Wenn Ihre Auswahl geändert wurde, sollten Sie die Tabellenansicht –

Antwort

1

Sie können Sie benutzerdefinierte ausgewählt machen Ansicht verstecken oder zeigen in der folgenden Methode in Ihrer Klasse CustomCell

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
    self.customSelectedView.hidden = !selected 
} 
+0

neu laden, indem Sie die benutzerdefinierte Ansicht programmgesteuert in didSelectRowAtIndexPath erstellen –

+0

Sie können eine Basisklasse von 'erstellen UITableViewCell' statt für einen guten Ansatz –

Verwandte Themen