2016-05-23 18 views
0

Ich versuche, verschiedene Inhalte wie Bilder/Text zur Tabelle hinzuzufügen. Ich habe 2 benutzerdefinierte TableViewCells für beide Typen erstellt. Ich habe das Haupt-Array, wo alles gespeichert wird (Bilder kodieren nach Base64 wegen des Speicherns in JSON).Benutzerdefiniertes TableViewCell | Swift

var content = [String]() 
var imgCell: ImageTableViewCell = ImageTableViewCell() 
var txtCell: TextTableViewCell = TextTableViewCell() 

Mit zwei Schaltflächen zum Hinzufügen von Bildern/Text.

Beim Aktualisieren der Tabelle kann ich nicht verstehen, wie Array-Daten mit benutzerdefinierten Zellen verbunden und angezeigt werden.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 
    if content[indexPath.row] == "text" { 
     return txtCell 
    } 
    else { 
     return imgCell 
    } 
    return UITableViewCell() 
} 

Hier ist benutzerdefinierte Zelle.

class TextTableViewCell: UITableViewCell { 

    @IBOutlet weak var textArticle: UITextView! 

} 

Antwort

1

Sie initialisieren nie solche Zellen. Innerhalb cellForRowAtIndexPath rufen Sie dequeueReusableCellWithIdentifier und abhängig von indexPath richten Sie die Zelle entsprechend ein. Wenn Sie die Zellen in einer Storyboard-Datei erstellt haben, stellen Sie sicher, dass sie ihre Bezeichner im Storyboard festlegen.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 
    let cell = tableView. dequeueReusableCellWithIdentifier(identifierForIndexPath(indexPath), forIndexPath:indexPath) 
    // set up cell accordingly 
} 

func identifierForIndexPath(indexPath:NSIndexPath) -> String { 
    // for example: (you can set this up according to your needs) 
    if (indexPath.row == 0) { 
     return "ImageCell" // these must match your identifiers in your storyboard 
    } 
    return "TextCell" 
} 

Alternativ können Sie separate Blöcke in cellForRowAtIndexPath für jeden Zelltyp, und dann würden Sie haben so etwas wie:

let cell = tableView.dequeueReusableCellWithIdentifier("TextCell", forIndexPath:indexPath) as! TextTableViewCell 
+0

ist es Gründe, diese Kennungen zu geben, wenn ich für jede Zelle gesetzt eine Klasse ? –

+0

'UITableView' verwendet String-Identifier zur Identifizierung von Zellen (z. B. zur Wiederverwendung). Wenn Sie 'UITableView' verwenden wollen, müssen Sie es entsprechend seiner API verwenden. – shim

+0

okay, aber die Frage ist, wie kann ich Daten aus Array verbinden und je nach Typ, verwenden Sie die benötigte Klasse und zeigen Sie es in Array? –

Verwandte Themen