滑動以刪除行

我總是認為有一個非常簡單,自包含的例子很好,所以當我學習一項新任務時,沒有任何假設。這個答案就是刪除 UITableView 行。該專案執行如下:

https://i.stack.imgur.com/sCoUS.gif

該專案基於 SwiftUITableView 示例

新增程式碼

建立一個新專案並使用以下程式碼替換 ViewController.swift 程式碼。

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // These strings will be the data for the table view cells
    var animals: [String] = ["Horse", "Cow", "Camel", "Pig", "Sheep", "Goat"]
    
    let cellReuseIdentifier = "cell"
    
    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // It is possible to do the following three things in the Interface Builder
        // rather than in code if you prefer.
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
        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, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) as UITableViewCell!
        
        cell.textLabel?.text = self.animals[indexPath.row]
        
        return cell
    }
    
    // method to run when table view cell is tapped
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }
    
    // this method handles row deletion
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        
        if editingStyle == .Delete {
            
            // remove the item from the data model
            animals.removeAtIndex(indexPath.row)
            
            // delete the table view row
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
            
        } else if editingStyle == .Insert {
            // Not used in our example, but if you were adding a new row, this is where you would do it.
        }
    }

}

上面程式碼中允許行刪除的單鍵方法是最後一個。這裡再次強調:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    
    if editingStyle == .Delete {
        
        // remove the item from the data model
        animals.removeAtIndex(indexPath.row)
        
        // delete the table view row
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }
}

故事板

UITableView 新增到故事板中的 View Controller。使用自動佈局將表檢視的四邊固定到 View Controller 的邊緣。控制從故事板中的表檢視拖動到程式碼中的 @IBOutlet var tableView: UITableView! 行。

成品

就這樣。你應該能夠立即執行你的應用並通過向左滑動並點按刪除來刪除行。

筆記

  • 這僅適用於 iOS 8.有關更多詳細資訊,請參閱此答案
  • 如果你需要更改顯示的按鈕數或按鈕文字,請參閱此答案以獲取更多詳細資訊。

進一步閱讀