2017-07-17 1 views
-2

Ich glaube, ich etwas von grundlegender Bedeutung für Swift bin fehlt, kann aber nicht andere Beispiele von Menschen finden zu tun, was ich versuche:cellForRowAt - Erstellen und Zellrück aus switch-Anweisung

Hintergrund

Ich habe eine UITableView mit 2 Prototyp-Zellen, mit einem anderen identifiziert, verschiedene Funktionen (Label, Bild usw.) und verschiedene Klassen.

Ich möchte, dass die CellForRowAt-Funktion einen anderen Typ und eine andere Zelle zurückgibt, abhängig vom Inhalt des Arrays, das die Tabellendaten enthält. Dieses Array ist mit Strukturinstanzen gefüllt, von denen ein Merkmal den Typ der Zelle identifiziert, die ich die Daten darstellen möchte.

-Code Versuch

Dies ist keine wortgetreue Kopieren/Einfügen, aber das Prinzip ist das gleiche

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     switch dataArray[indexPath.item].typeOfData { 
     case "Type1": 
      let cell = tableView.dequeueReusableCell(withIdentifier: "type1ReuseIdentifier", for: indexPath) as! type1Cell 
      //Set up the cell contents 
      return cell 
     case "Type2": 
      let cell = tableView.dequeueReusableCell(withIdentifier: "type2ReuseIdentifier", for: indexPath) as! type2Cell 
      //Set up the cell contents 
      return cell 
     default 
      let cell = tableView.dequeueReusableCell(withIdentifier: "separatorIdentifier", for: indexPath) as! separatorCell 
      //Set up the cell contents 
      return cell 
    } 
} 

Das Problem ist, das nicht funktioniert, Swift will mich und erklären, gebe die Zelle außerhalb der switch-Anweisung zurück, kann dies jedoch nicht tun, da die Deklaration des Zelltyps vom Typ der Daten abhängt, die ich erstellen möchte (da! typexCell für den Zugriff auf die Komponenten der benutzerdefinierten Zellen benötigt wird).

Was vermisse ich/mache ich falsch?

+0

Haben Sie geschrieben 'default' Fall zurückkehren? – iPeter

+0

Vergleichen Sie [Fehlende Rückkehr UITableViewCell] (https://stackoverflow.com/questions/30189505/missing-return-guidableviewcell). –

+0

Entschuldigung, ja, die Standardanweisung ist auch da und gibt eine Trennzeichenzelle zurück – KnowledgeQuest

Antwort

1

tun wie folgt aus:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let typeSection = CellType(rawValue: indexPath.row)! 

    switch typeSection { 
    case .CenterTitleCell: 
     return getCenterTitleCell(tableView, indexPath) 
    case .CenterDescriptionCell: 
     return getCenterDescriptionCell(tableView, indexPath) 
    case .CenterImageCell: 
     return getImageCell(tableView, indexPath) 
    case .FooterTitleCell: 
     return getFooterViewCell(tableView, indexPath) 
    } 
} 

Und eine andere Methode verwenden, um den Zelltyp

func getCenterTitleCell (_ tableView: UITableView, _ indexPath:IndexPath) -> CenterTitleTableViewCell { 
    let cell:CenterTitleTableViewCell = tableView.dequeueReusableCell(withIdentifier: String(describing: CenterTitleTableViewCell.self), 
                        for: indexPath) as! CenterTitleTableViewCell 
    cell.selectionStyle = .none 
    return cell 
} 
+0

Angenommen, es gibt nur 4 Zeilen und jede Zeile erhält ihren eigenen Zelltyp. Im Allgemeinen werden die meisten Tabellen nicht so eingerichtet. – rmaddy

+0

Dies ist ein einfaches Beispiel, wie Sie es tun können. In diesem Fall habe ich ein enum, das den Zelltyp bereitstellt, da es sich um einen statischen Bildschirm handelt. Sollte das Beispiel an den Code anpassen, den er möchte. – ppinho

Verwandte Themen