iOS 滑动以删除行

示例

我总是认为有一个非常简单,独立的示例很好,这样在我学习新任务时就不会做任何假设。答案是删除UITableView行。该项目的执行如下:

动画gif,显示滑动和删除

该项目基于Swift的UITableView示例。

添加代码

创建一个新项目并替换ViewController.swift代码如下。

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // 这些字符串将成为表视图单元格的数据
    var animals: [String] = ["Horse", "Cow", "Camel", "Pig", "Sheep", "Goat"]
    
    let cellReuseIdentifier = "cell"
    
    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() {        super.viewDidLoad()
        
        // 可以在Interface Builder中执行以下三件事
        // 而不是使用代码(如果您愿意)。
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)       tableView.delegate= self       tableView.dataSource= self
    }
    
    // 表格视图中的行数
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.animals.count
    }
    
    // 为每个表格视图行创建一个单元格
    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
    }
    
    // 点击表视图单元格时运行的方法
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }
    
    // 此方法处理行删除
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        
        if editingStyle == .Delete {
            
            // 从数据模型中删除项目
            animals.removeAtIndex(indexPath.row)
            
            // 删除表格视图行
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
            
        } else if editingStyle == .Insert {
            // 在我们的示例中未使用,但是如果要添加新行,则在此处进行操作。
        }
    }

}

上面代码中允许行删除的单键方法是最后一个。这里再次强调:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    
    if editingStyle == .Delete {
        
        // 从数据模型中删除项目
        animals.removeAtIndex(indexPath.row)
        
        // 删除表格视图行
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }
}

Storyboard

将UITableView添加到情节提要中的视图控制器。使用“自动布局”将表视图的四边固定到视图控制器的边缘。控制从序列图像板中的表视图拖动到@ibvar tableView:UITableView!代码中的行。

已完成

就这样。您现在应该可以运行您的应用并通过向左滑动并点击“删除”来删除行。

笔记

  • 仅在iOS 8中可用。有关更多详细信息,请参见此答案。

  • 如果您需要更改显示的按钮数量或按钮文本,请参阅此答案以获取更多详细信息