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

问题描述 投票:0回答:2

我有以下 -

    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;
    }
ios swift uitableview swipe-gesture
2个回答
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然后是动作按钮。

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

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


0
投票

很可能你忘了写:

self.delegate = self
self.dataSource = self
© www.soinside.com 2019 - 2024. All rights reserved.