在 UITableView 单元格滑动中选择 'Delete',但未调用 'commit editingStyle'
Selecting 'Delete' in UITableView cell swipe, but 'commit editingStyle' not called
我有以下 -
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' 选项按预期显示 -
Delete action shown
如果我-
- 点击删除,上面带参数'commit editingStyle'的方法不会被调用
- 一直向左滑动到视图的左侧,而不是在出现删除时停止,调用该方法。
在我看来,#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;
}
很可能你忘了写:
self.delegate = self
self.dataSource = self
似乎 commit
没有被调用,因为 class 覆盖了 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
是操作按钮。
简单地删除它 may/will 会导致问题(第一个注意到的是 "drop down" 在其外部点击时不会关闭)。
因此您需要编辑该函数...可能需要一些工作,但这是开始的地方。
我有以下 -
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' 选项按预期显示 - Delete action shown
如果我-
- 点击删除,上面带参数'commit editingStyle'的方法不会被调用
- 一直向左滑动到视图的左侧,而不是在出现删除时停止,调用该方法。
在我看来,#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;
}
很可能你忘了写:
self.delegate = self
self.dataSource = self
似乎 commit
没有被调用,因为 class 覆盖了 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
是操作按钮。
简单地删除它 may/will 会导致问题(第一个注意到的是 "drop down" 在其外部点击时不会关闭)。
因此您需要编辑该函数...可能需要一些工作,但这是开始的地方。