Tabellen darstellen mit UITableViewController

von @ralfebert · aktualisiert am 29. Oktober 2019

Ein UITableView bringt Cells in Sections gruppiert zur Anzeige. Dabei werden die Anzeigestile Plain und Grouped unterschieden. Zellen unterstützen standardmäßig die Anzeigestile Basic, Right Detail, Left Detail und Subtitle:

UITableViewStyle.Plain, .Grouped, UITableViewCellStyle

Inhalte im Storyboard definieren

Standardmäßig werden die Inhalte für Table Views programmatisch bereitgestellt. Für Listen und Auswahlmenüs mit statischen Inhalten können mit der Table View-Option Content: Static Cells die Inhalte direkt im Storyboard konfiguriert werden:

Table View Content: Static Cells

In der Section kann dabei die Anzahl der Zellen festgelegt werden:

Table View Section: Section Rows

Für die Zelle kann dann der Stil und das Aussehen der Tabellenzelle konfiguriert werden:

Table View Cell Style

Tabellen dynamisch befüllen

Alternativ zur Verwendung von Static Cells um die Tabelleninhalte im Storyboard zu definieren, können mittels Dynamic Prototypes Vorlagen für Zellen konfiguriert werden, die dann bei der Implementierung der UITableViewController-Klasse verwendet werden können:

Table View Content: Dynamic Prototypes

Für die Zellen muss dafür ein eindeutiger Reuse Identifier vergeben werden, über den auch verschiedene Arten von Zellen unterschieden werden können:

Reuse Identifier für Zellen im Storyboard

So definierte Prototypen für Zellen können in der Implementierung der UITableViewController-Klasse verwendet werden. Das UITableView hat eine Eigenschaft dataSource, dieses Objekt ist dafür zuständig, die Daten für die Tabellendarstellung bereitzustellen, und delegate, dieses Objekt ist dafür zuständig, aufgetretene Ereignisse zu behandeln. Beide Aufgaben werden vom UITableViewController übernommen:

DataSource und Delegate des UITableViews

Dazu werden von den Protokollen UITableViewDataSource und UITableViewDelegate definierte Methoden in der UITableViewController-Implementierung überschrieben, um die Inhalte für die Zellen bereitzustellen.

Das folgende ExampleTableViewController-Beispiel zeigt anhand folgender Darstellung die wichtigsten Methoden des UITableViewDataSource-Protokolls:

class ExampleTableViewController: UITableViewController {

    let fruits = ["Apple", "Orange", "Peach"]

    // Anzahl der Abschnitte (kann entfallen wenn nur ein Tabellenabschnitt benötigt wird)
    override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

    // Anzahl der Zeilen für einen bestimmten Abschnitt
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return fruits.count
}

    // Optional: Überschriften für die Tabellenabschnitte
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return "Section \(section)"
}

    // Die tableView(cellForRowAt:)-Methode wird aufgerufen, um UITableViewCell-Objekte
    // für sichtbare Tabellenzellen zu erzeugen
    override func tableView(_ tableView: UITableView,
                         cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // Mit dequeueReusableCell werden Zellen gemäß der im Storyboard definierten Prototypen erzeugt
    let cell = tableView.dequeueReusableCell(withIdentifier:"TextCell", for: indexPath)

    // Dafür wird der Abschnitts- und Zeilenindex in einem IndexPath-Objekt übergeben
    let fruit = fruits[indexPath.row]

    // Zelle konfigurieren
    cell.textLabel?.text = "Section \(indexPath.section), Row \(indexPath.row): \(fruit)"

    return cell
}

}

Weitere Informationen