webentwicklung-frage-antwort-db.com.de

UITableView-Beispiel für Swift

Ich arbeite seit einigen Monaten mit Swift und iOS. Ich kenne viele Möglichkeiten, wie Dinge gemacht werden, aber ich bin nicht gut genug, dass ich einfach Dinge aufschreiben kann, ohne hinzusehen. Ich habe Stack Overflow in der Vergangenheit sehr geschätzt, weil ich schnelle Antworten gegeben habe, um mich wieder mit Themen zu beschäftigen, an denen ich mich verrostet habe (zum Beispiel AsyncTask Android-Beispiel ).

die UITableView von iOS ist für mich in dieser Kategorie. Ich habe sie ein paar Mal gemacht, aber ich habe die Details vergessen. Ich konnte keine andere Frage zu StackOverflow finden, die nur nach einem einfachen Beispiel fragt, und ich suche nach etwas kürzerem als vielen der Online-Tutorials (obwohl this sehr gut ist).

Ich gebe unten eine Antwort für meine zukünftige Referenz und für Ihre.

49
Suragch

Das folgende Beispiel ist eine Anpassung und Vereinfachung von ein längerer Beitrag von We ❤ Swift. So wird es aussehen:

enter image description here

Erstellen Sie ein neues Projekt

Es kann sich nur um die übliche Single View-Anwendung handeln.

Fügen Sie den Code hinzu

Ersetzen Sie den ViewController.Swift ​​Code durch den folgenden:

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 gerade passiert. Die Highlights sind

  • Der View Controller übernimmt die Protokolle UITableViewDelegate und UITableViewDataSource.
  • Die Methode numberOfRowsInSection bestimmt, wie viele Zeilen sich in der Tabellenansicht befinden.
  • Die Methode cellForRowAtIndexPath richtet jede Zeile ein.
  • Die Methode didSelectRowAtIndexPath wird jedes Mal aufgerufen, wenn auf eine Zeile getippt wird.

Fügen Sie dem Storyboard eine Tabellenansicht hinzu

Ziehen Sie eine UITableView auf Ihren View Controller. Verwenden Sie das automatische Layout, um die vier Seiten zu fixieren.

enter image description here

Schließen Sie die Steckdosen an

Control Ziehen Sie aus der Tabellenansicht in IB auf den Ausgang tableView im Code.

Fertig

Das ist alles. Sie sollten jetzt in der Lage sein, Ihre App auszuführen.

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. Lesen Sie dieses grundlegende Beispiel , um zu erfahren, wie.

enter image description here

Zeilenabstand

Wenn Sie einen Abstand zwischen Ihren Zeilen wünschen, lesen Sie dieses ergänzende Beispiel .

enter image description here

Benutzerdefinierte Zellen

Das Standardlayout für die Zellen der Tabellenansicht entspricht möglicherweise nicht Ihren Anforderungen. Schauen Sie sich dieses Beispiel an um Ihnen zu helfen, Ihre eigenen benutzerdefinierten Zellen zu erstellen.

enter image description here

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 festzulegen. Siehe dieses Beispiel für alles, was Sie brauchen, um loszulegen.

enter image description here

Weitere Lektüre

173
Suragch

Der Vollständigkeit halber, und für diejenigen, die den Interface Builder nicht verwenden möchten, können Sie dieselbe Tabelle wie in Suragch's answer vollständig programmgesteuert 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 an import UIKit erinnert haben.

23
Matt Le Fleur
//    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;
        }
}
1
Ananda Aiwale

In Swift 4.1 und Xcode 9.4.1

1) Fügen Sie UITableViewDataSource und UITableViewDelegate Ihrer Klasse hinzu.

2) Erstellen Sie eine Tabellenseitenvariable und ein Array.

3) Erstellen Sie in viewDidLoad eine Tabellenansicht.

4) Call Table View Delegates

5) Delegieren von Funktionen für die Tabellensicht basierend auf Ihrer Anforderung.

import UIKit
class yourViewController: UIViewController , UITableViewDataSource, UITableViewDelegate { // 1

var yourTableView:UITableView = UITableView()// 2
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 das Storyboard verwenden, ist kein Schritt 3 erforderlich. 

Sie müssen jedoch IBOutlet Ihrer Tabellensicht erstellen und dann Schritt 4

1
iOS

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).")
    }

}
0
Ahmet Akkök