是否滑动删除删除tableView行的唯一方法?

时间:2017-12-25 09:51:51

标签: ios swift uitableview

我一直在和人们一起测试应用程序,在我告诉他们他们可以刷卡删除后,他们发现它很直观但不是每个人 - 至少在我的经验中 - 是足够精明的解决它。

还有其他选择吗?我认为理想情况下我想在tableView单元格上有一个小垃圾桶或“x”,可以按下来删除。但不确定这是否很容易实现。

我遇到的第一个问题是我不认为我可以将IBOutletTableViewCell拖到我有桌面视图的UIViewController

即使可能无法确定在单击删除按钮时如何实现以下功能。

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {

所以只是想知道刷卡删除是否是我唯一的选择?

感谢。

2 个答案:

答案 0 :(得分:1)

您所描述的内容通常是通过在导航栏的一侧放置“编辑”按钮来实现的。该按钮将表格置于编辑模式,允许点击小的红色删除按钮。只是另一种做同样事情的方法,即删除一行。从iOS模板创建Master-Detail应用程序,并查看如何在viewDidLoad方法中以编程方式创建按钮。然后查看以下处理删除的方法,无论是通过滑动还是编辑按钮启动。

override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    // Return false if you do not want the specified item to be editable.
    return true
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        objects.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .fade)
    } else if editingStyle == .insert {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
    }
}

答案 1 :(得分:1)

您可以执行此操作以在tableView单元格上实现“x”按钮:

protocol CustomCellDelegate {

    func removeButtonTappedOnCell(with indexPath: IndexPath)
}

class CustomCell: UITableViewCell {

    var delegate: CustomCellDelegate?

    @IBOutlet weak var removeButton: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    @IBAction func removeButtonTapped(_ sender: UIButton) {
        let indexPath = IndexPath(row: sender.tag, section: 0)
        delegate?.removeButtonTappedOnCell(with: indexPath)
    }
}

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, CustomCellDelegate {

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
        cell.removeButton.tag = indexPath.row
        cell.delegate = self
        return cell
    }

    func removeButtonTappedOnCell(with indexPath: IndexPath) {
        modelArray.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .right)
    }
}