2016-06-15 9 views
0

Ich habe eine gruppierte Tabellenansicht, die aus zwei Zeilen besteht und jede Zeile hat eine benutzerdefinierte Tabellenansicht Zelle. Ich habe die benutzerdefinierten Tabellenansichtsklassen und Zellbezeichner erstellt und den Tabellenansichtszeilen in Interface Builder zugeordnet. Meine erste Tabellenansichtszelle ist in Ordnung, aber die zweite scheint die gleichen Eigenschaften wie die erste Zelle zu haben. Wenn ich jedoch auf die zweite Zelle klicke, tippe dann auf die erste Zelle und die zweite Zelle auf das richtige Zellen-Design.UITableView mit zwei benutzerdefinierten Zellen, die nicht richtig angezeigt werden

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("EditCellID", forIndexPath: indexPath) as! EditCell 
    if indexPath.row == 0 
    { 
     //Do some stuff 
     return cell 
    } 
    if indexPath.row == 1 
    { 
     let cell = tableView.dequeueReusableCellWithIdentifier("DeleteCellID", forIndexPath: indexPath) as! DeleteCell 
     //Do some stuff 
     return cell 
    } 

    return cell 
} 

Antwort

0

Try this:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: UITableViewCell! 

    if indexPath.row == 0 { 
     cell = tableView.dequeueReusableCellWithIdentifier("EditCellID", forIndexPath: indexPath) as! EditCell 
     // Now you can access the subclass attributes by doing : (cell as! EditCell).theAttribute 
    } else { 
     cell = tableView.dequeueReusableCellWithIdentifier("DeleteCellID", forIndexPath: indexPath) as! DeleteCell 
    } 

    return cell 
} 

nur eine Zelle Objekt in Umfang erstellen und je nach der Reihe, das Objekt als Instanz eines Ihrer spezifischen UITableViewCell Subklassen initialisieren.

UPDATE: Es wurde ein Kommentar zum Zugriff auf die Attribute der UITableViewCell-Unterklasse hinzugefügt.

+0

Macht Sinn, aber ich bekomme einen Fehler, wenn ich versuche, die Zelleigenschaften in der ersten if-Anweisung zu setzen. Zum Beispiel hat EditCell ein 'UITextField IBOutlet', aber wenn ich es einstelle, erhalte ich eine Fehlermeldung, die besagt, dass 'Wert vom Typ UITableViewCell kein Mitglied titleField' hat. Aus irgendeinem Grund bleibt die Zelle als Typ "UITableViewCell", anstatt in "EditCell" zu wechseln. – Brosef

+0

Entschuldigung, ich habe vergessen, diesen Leckerbissen zu meiner Antwort hinzuzufügen. Tun Sie das einfach: '(Zelle als! EditCell) .titleField' – Lucas

+0

Wow! das hat perfekt funktioniert, aber warum ist '(cell as! EditCell) .titleField' notwendig? Haben wir die Zelle nicht als EditCell in diese Zeile cell = tableView.dequeueReusableCellWithIdentifier ("EditCellID", forIndexPath: indexPath) as! EditCell'? – Brosef

Verwandte Themen