Ich arbeite jetzt seit einigen Monaten mit Swift und iOS. Ich bin mit vielen Methoden vertraut, aber ich bin nicht gut genug, um Dinge aufzuschreiben, ohne hinzuschauen. Ich habe Stack Overflow in der Vergangenheit für schnelle Antworten geschätzt, um mich wieder auf den richtigen Weg zu Themen zu bringen, bei denen ich verrostet bin (z. B. AsyncTask Android-Beispiel ).
iOS UITableView
ist in dieser Kategorie für mich. Ich habe sie ein paar Mal gemacht, aber ich vergesse die Details. Ich konnte auf StackOverflow keine andere Frage finden, die nur nach einem einfachen Beispiel fragt, und ich suche nach etwas, das kürzer ist als viele der Online-Tutorials (obwohl dieses sehr gut ist).
Ich gebe unten eine Antwort für meine zukünftige Referenz und Ihre.
quelle
Antworten:
Das folgende Beispiel ist eine Anpassung und Vereinfachung eines längeren Beitrags von We ❤ Swift. So wird es aussehen:
Erstellen Sie ein neues Projekt
Es kann nur die übliche Single View-Anwendung sein.
Fügen Sie den Code hinzu
Ersetzen Sie den Code ViewController.swift durch Folgendes:
import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // Data model: These strings will be the data for the table view cells let animals: [String] = ["Horse", "Cow", "Camel", "Sheep", "Goat"] // cell reuse id (cells that scroll out of view can be reused) let cellReuseIdentifier = "cell" // don't forget to hook this up from the storyboard @IBOutlet var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() // Register the table view cell class and its reuse id self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier) // (optional) include this line if you want to remove the extra empty cell divider lines // self.tableView.tableFooterView = UIView() // This view controller itself will provide the delegate methods and row data for the table view. tableView.delegate = self tableView.dataSource = self } // number of rows in table view func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.animals.count } // create a cell for each table view row func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // create a new cell if needed or reuse an old one let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell! // set the text from the data model cell.textLabel?.text = self.animals[indexPath.row] return cell } // method to run when table view cell is tapped func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("You tapped cell number \(indexPath.row).") } }
Lesen Sie die In-Code-Kommentare, um zu sehen, was passiert. Die Highlights sind
UITableViewDelegate
undUITableViewDataSource
.numberOfRowsInSection
Methode bestimmt, wie viele Zeilen in der Tabellenansicht vorhanden sind.cellForRowAtIndexPath
Methode richtet jede Zeile ein.didSelectRowAtIndexPath
Methode wird jedes Mal aufgerufen, wenn auf eine Zeile getippt wird.Fügen Sie dem Storyboard eine Tabellenansicht hinzu
Ziehen Sie a
UITableView
auf Ihren View Controller. Verwenden Sie das automatische Layout, um die vier Seiten zu fixieren.Schließen Sie die Steckdosen an
ControlZiehen Sie von der Tabellenansicht in IB zum
tableView
Ausgang im Code.Fertig
Das ist alles. Sie sollten Ihre App jetzt ausführen können.
Diese Antwort wurde mit Xcode 9 und Swift 4 getestet
Variationen
Zeilenlöschung
Sie müssen dem obigen Basisprojekt nur eine einzige Methode hinzufügen, wenn Sie Benutzern das Löschen von Zeilen ermöglichen möchten. In diesem grundlegenden Beispiel erfahren Sie, wie.
Zeilenabstand
Wenn Sie einen Abstand zwischen Ihren Zeilen wünschen, lesen Sie dieses ergänzende Beispiel .
Benutzerdefinierte Zellen
Das Standardlayout für die Tabellenansichtszellen entspricht möglicherweise nicht Ihren Anforderungen. Schauen Sie sich dieses Beispiel an, um mit dem Erstellen eigener benutzerdefinierter Zellen zu beginnen.
Dynamische Zellenhöhe
Manchmal möchten Sie nicht, dass jede Zelle dieselbe Höhe hat. Ab iOS 8 ist es einfach, die Höhe abhängig vom Zelleninhalt automatisch einzustellen. In diesem Beispiel finden Sie alles, was Sie für den Einstieg benötigen.
Weiterführende Literatur
quelle
tableView.tableFooterView = UIView()
Entfernen leerer Tabellenansichtszeilen durch Hinzufügen einer Fußzeile in viewDidLoad (), Hinzufügencell.imageView!.image = UIImage(named: "image")
für dascell.backgroundColor = UIColor
Der Vollständigkeit halber und für diejenigen, die den Interface Builder nicht verwenden möchten, finden Sie hier eine Möglichkeit, dieselbe Tabelle wie in Suragchs Antwort vollständig programmatisch zu erstellen - allerdings mit einer anderen Größe und Position.
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { var tableView: UITableView = UITableView() let animals = ["Horse", "Cow", "Camel", "Sheep", "Goat"] let cellReuseIdentifier = "cell" override func viewDidLoad() { super.viewDidLoad() tableView.frame = CGRectMake(0, 50, 320, 200) tableView.delegate = self tableView.dataSource = self tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier) self.view.addSubview(tableView) } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return animals.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) as UITableViewCell! cell.textLabel?.text = animals[indexPath.row] return cell } func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { print("You tapped cell number \(indexPath.row).") } }
Stellen Sie sicher, dass Sie sich daran erinnert haben
import UIKit
.quelle
In Swift 4.1 und Xcode 9.4.1
Fügen Sie UITableViewDataSource, UITableViewDelegate hinzu, das an Ihre Klasse delegiert ist.
Erstellen Sie eine Tabellenansichtsvariable und ein Array.
In viewDidLoad erstellen Sie eine Tabellenansicht.
Delegierte der Tabellenansicht aufrufen
Delegate-Funktionen für die Aufrufe der Tabellenansicht basierend auf Ihren Anforderungen.
import UIKit // 1 class yourViewController: UIViewController , UITableViewDataSource, UITableViewDelegate { // 2 var yourTableView:UITableView = UITableView() let myArray = ["row 1", "row 2", "row 3", "row 4"] override func viewDidLoad() { super.viewDidLoad() // 3 yourTableView.frame = CGRect(x: 10, y: 10, width: view.frame.width-20, height: view.frame.height-200) self.view.addSubview(yourTableView) // 4 yourTableView.dataSource = self yourTableView.delegate = self } // 5 // MARK - UITableView Delegates func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return myArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell : UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "cell") if cell == nil { cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") } if self. myArray.count > 0 { cell?.textLabel!.text = self. myArray[indexPath.row] } cell?.textLabel?.numberOfLines = 0 return cell! } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 50.0 }
Wenn Sie ein Storyboard verwenden, ist Schritt 3 nicht erforderlich.
Sie müssen jedoch vor Schritt 4 ein IBOutlet für Ihre Tabellenansicht erstellen.
quelle
Hier ist die Swift 4 Version.
import Foundation import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { var tableView: UITableView = UITableView() let animals = ["Horse", "Cow", "Camel", "Sheep", "Goat"] let cellReuseIdentifier = "cell" override func viewDidLoad() { super.viewDidLoad() tableView.frame = CGRect(x: 0, y: 50, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height) tableView.delegate = self tableView.dataSource = self tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier) self.view.addSubview(tableView) } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return animals.count } internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell! cell.textLabel?.text = animals[indexPath.row] return cell } private func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) { print("You tapped cell number \(indexPath.row).") } }
quelle
// UITableViewCell set Identify "Cell" // UITableView Name is tableReport UIViewController,UITableViewDelegate,UITableViewDataSource,UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet weak var tableReport: UITableView! func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 5; } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableReport.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = "Report Name" return cell; } }
quelle