在UITableView单元格滑动中选择“删除”,但未调用“提交editingStyle”

时间:2019-02-14 18:13:35

标签: ios swift uitableview swipe-gesture

我有以下内容-

    class BTTableView: UITableView, UITableViewDelegate, UITableViewDataSource

使用这些方法-

    public func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
        return .delete
    }

    public func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
    {
        print("editingStyle")
    }

当我在某个单元格上向左滑动时,“删除”选项按预期显示- Delete action shown

如果我-

  1. 点击“删除”,上面带有参数“ commit editingStyle”的方法不会被调用
  2. 向左滑动到视图的左侧,而不是在出现Delete(删除)时停止,该方法被调用。

在我看来,此方法将同时被#1和#2调用。

有人可以帮助我了解我做错了什么吗?

编辑-通过DonMag的输入,解决了以下问题:

     override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        if let hitView = super.hitTest(point, with: event) {
            let isSwipeButton = String(describing: type(of: hitView)) ==  "UISwipeActionStandardButton"
            if hitView.isKind(of: BTTableCellContentView.self)  || isSwipeButton {
                return hitView
            }
        }
        return nil;
    }

2 个答案:

答案 0 :(得分:0)

您很可能忘记写了:

self.delegate = self
self.dataSource = self

答案 1 :(得分:0)

似乎没有调用commit,因为该类覆盖了hitTest

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    if let hitView = super.hitTest(point, with: event) , hitView.isKind(of: BTTableCellContentView.self) {
        return hitView
    }
    return nil;
}

并返回nil,因为hitView是操作按钮。

简单地删除它可能/将引起问题(首先注意到的是,在其外部点击时,“下拉”不会关闭)。

因此,您需要编辑该功能...可能需要一些工作,但这是开始的地方。