Ich möchte eine UITableview mit verschiedenen benutzerdefinierten tableViewCells verwenden. Meine 3 Zellen sind als solche:
- Zelle1: sollte ein Bild und eine Beschriftung haben.
- Zelle2: sollte zwei Beschriftungen haben.
- Cell3: sollte einen dayPicker haben.
Ich möchte kein Tag für die Zellen codieren. Wie kann ich das in Swift schaffen? Muss ich für jede Zelle meine eigene Klasse codieren? Kann ich einen tableviewController verwenden? Wie kann ich Daten in verschiedenen Zellen füllen?
Ich möchte eine Tabellenansicht generieren, wie eine Kontakt-App eines iOS-Geräts.
swift
uitableview
Easyglider
quelle
quelle
Antworten:
Lassen Sie mich zunächst Ihre Fragen beantworten.
Muss ich für jede Zelle eine eigene Klasse codieren? => Ja, ich glaube schon. Zumindest würde ich das so machen.
Kann ich einen tableviewController verwenden? => Ja, das können Sie. Sie können jedoch auch eine Tabellenansicht in Ihrem View Controller haben.
Wie kann ich Daten in verschiedenen Zellen füllen? => Abhängig von den Bedingungen können Sie Daten in verschiedenen Zellen auffüllen. Angenommen, Sie möchten, dass Ihre ersten beiden Zeilen dem ersten Zelltyp entsprechen. Sie erstellen / verwenden also einfach den ersten Zelltyp und legen dessen Daten fest. Es wird klarer, wenn ich Ihnen die Screenshots zeige, denke ich.
Lassen Sie mich Ihnen ein Beispiel mit einer TableView in einem ViewController geben. Sobald Sie das Hauptkonzept verstanden haben, können Sie versuchen, es nach Belieben zu ändern.
Schritt 1: Erstellen Sie 3 benutzerdefinierte TableViewCells. Ich habe es FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell genannt. Sie sollten aussagekräftigere Namen verwenden.
Schritt 2: Gehen Sie zum Main.storyboard und ziehen Sie eine TableView per Drag & Drop in Ihren View Controller. Wählen Sie nun die Tabellenansicht aus und rufen Sie den Identitätsinspektor auf. Setzen Sie den "Prototyp Cells" auf 3. Hier haben Sie Ihrem TableView gerade mitgeteilt, dass Sie möglicherweise 3 verschiedene Arten von Zellen haben.
Schritt 3: Wählen Sie nun die erste Zelle in Ihrer TableView und im Identitätsinspektor aus, geben Sie "FirstCustomTableViewCell" in das Feld "Benutzerdefinierte Klasse" ein und legen Sie den Bezeichner im Attributinspektor als "firstCustomCell" fest.
Machen Sie dasselbe für alle anderen - Legen Sie ihre benutzerdefinierten Klassen als "SecondCustomTableViewCell" bzw. "ThirdCustomTableViewCell" fest. Legen Sie außerdem die Bezeichner nacheinander als secondCustomCell und ThirdCustomCell fest.
Schritt 4: Bearbeiten Sie die benutzerdefinierten Zellenklassen und fügen Sie nach Bedarf Steckdosen hinzu. Ich habe es basierend auf Ihrer Frage bearbeitet.
PS: Sie müssen die Steckdosen unter die Klassendefinition stellen.
Also, in der FirstCustomTableViewCell.swift, unter dem
Sie würden Ihre Etiketten- und Bildansicht-Steckdosen platzieren.
Fügen Sie in SecondCustomTableViewCell.swift die beiden Beschriftungen wie folgt hinzu:
und die ThirdCustomTableViewCell.swift sollte wie folgt aussehen:
Schritt 5: Erstellen Sie in Ihrem ViewController ein Outlet für Ihre TableView und stellen Sie die Verbindung über das Storyboard her. Außerdem müssen Sie UITableViewDelegate und UITableViewDataSource in der Klassendefinition als Protokollliste hinzufügen. Ihre Klassendefinition sollte also so aussehen:
Hängen Sie anschließend die UITableViewDelegate und UITableViewDatasource Ihrer Tabellenansicht an Ihren Controller an. Zu diesem Zeitpunkt sollte Ihr viewController.swift wie folgt aussehen:
PS: Wenn Sie einen TableViewController anstelle eines TableView in einem ViewController verwenden würden, hätten Sie diesen Schritt überspringen können.
Schritt 6: Ziehen Sie die Bildansichten und Beschriftungen entsprechend der Cell-Klasse in Ihre Zelle und legen Sie sie dort ab. und stellen Sie dann über das Storyboard eine Verbindung zu ihren Steckdosen her.
Schritt 7: Schreiben Sie nun die erforderlichen Methoden der UITableViewDatasource in den View Controller.
quelle
Swift 3.0 + Update mit minimalem Code
Grundkonzept: Erstellen Sie eine Tabellenansicht mit dynamischen Zellprototypen. Weisen Sie einen Bezeichner zu und erstellen Sie eine benutzerdefinierte Tabellenklasse für die Tabellenansicht für jeden Zellenprototyp. Initiieren und Anzeigen von benutzerdefinierten Zellen in der Delegatenmethode der Tabellenansicht.
1. Erstellen Sie Zellen im Storyboard
Ziehen Sie eine Tabellenansicht auf Ihren Ansichtscontroller, fügen Sie Prototypzellen hinzu, und legen Sie dann das UI-Element in Ihren Tabellenansichtszellen ab. Fügen Sie bei Bedarf Einschränkungen ordnungsgemäß hinzu.
2. Erstellen Sie benutzerdefinierte
UITableViewCell
KlassenFügen Sie Ihrem Projekt den folgenden Code hinzu. Ich setze es direkt über die View Controller-Klasse.
3. Weisen Sie den Zellprototypen eine benutzerdefinierte Klasse und Kennung zu
Weisen Sie für jeden der Zellprototypen im Storyboard die aus Schritt 2 erstellte benutzerdefinierte Klasse zu und geben Sie dann eine eindeutige Kennung ein.
4. Verbinden Sie UI-Elemente mit schnellem Code
Ziehen Sie bei gedrückter Ctrl-Taste die Tabellenansicht und stellen Sie eine Verbindung zur View-Controller-Klasse her. Ziehen Sie die UI-Elemente, die in Schritt 1 zu Zellprototypen hinzugefügt werden, und stellen Sie eine Verbindung zur entsprechenden Zellenklasse der Tabellenansicht her.
5. Fügen Sie Code hinzu, um den Controller anzuzeigen und die Tabellenansicht zu steuern
Passen Sie Ihren View Controller an den Delegierten der Tabellenansicht an
In
viewDidLoad
, Tabelle nach Ansicht der Delegierten und Datenquelle einrichten.Fügen Sie abschließend zwei Delegierungsmethoden hinzu, um Ihre Tabellenansicht gemäß den Mindestanforderungen zu steuern.
6. Probieren Sie es aus :)
quelle
Die obigen Antworten sind die besten Antworten, aber es gibt Unmengen von Gründen, um dieses Problem zu bekommen. Hier ist eine weitere mögliche Lösung für alle mit diesem Problem:
Mein Problem war, dass ich zur ViewController-Klasse und nicht zur Storyboard-Ansicht überging. Mein Verweis auf die Storyboard-Zelle war also bedeutungslos, da das Storyboard nicht verwendet wurde.
Ich habe das gemacht:
Und ich musste so etwas tun:
Hoffe das hilft jemandem.
quelle
UITableViewController
erbtUIViewController
, das bereitsUITableviewDataSource
&UITableviewDelegate
auf sich selbst abgebildet hat.Sie können eine Unterklasse
UITableViewController
oder eineTableView
in Ihrem verwendenViewController
. Danach müssen Sie die erforderlichen Methoden (cellForRowAtIndexPath
and numberOfRowsInSection
) implementieren, die in der deklariert sindUITableviewDataSource
.Auch im Storyboard müssen Sie Zellprototypen mit eindeutiger ID erstellen.
Es gibt grundlegende Zelltypen mit (z. B. Titel, Untertitel) - Sie können sie auch verwenden, wenn Sie keine spezielle Konfiguration benötigen.
Für die Auswahl müssen Sie also eine eigene benutzerdefinierte Zelle erstellen. Erstellen Sie die erforderliche benutzerdefinierte
UITableViewCell
Auswahl für das Halten von Klassen und stellen Sie sicher, dass Sie mit delegate das gewünschte Ergebnis an Ihre sendenViewController
.quelle