在 UITableView 单元格滑动中选择“删除”,但未调用“提交编辑样式”
Posted
技术标签:
【中文标题】在 UITableView 单元格滑动中选择“删除”,但未调用“提交编辑样式”【英文标题】:Selecting 'Delete' in UITableView cell swipe, but 'commit editingStyle' not called 【发布时间】:2019-02-14 18:13:34 【问题描述】:我有以下 -
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
如果我 -
-
点击删除,上面带参数'commit editingStyle'的方法不会被调用
一直向左滑动到视图的左侧,而不是在出现 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;
【问题讨论】:
如果你的类是UITableView
的子类,那些方法不应该是override
吗? 编辑:抱歉,刚刚发现不是UITableViewController
....
嗯...我刚刚试了一下,完全滑动和部分滑动和点击都调用了commit
。您的代码中还有其他内容吗?也许尝试一个简单的例子?
我认为您也存在架构问题。你的 UITableView
子类不应该是它自己的数据提供者。
我将分享更多关于我的设置的信息。我正在尝试使 BTNavigationDropdownMenu 支持滑动删除。我已经下载了项目,按照我的问题对 BTTableView 类进行了更改,并在我的 Podfile 中指向生成的构建产品。
@DaveLargent - 为了将来参考,最好在发布问题时提供所有的相关信息。
【参考方案1】:
似乎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
是操作按钮。
简单地删除它可能/会导致问题(首先注意到的是“下拉”在点击它外部时不会关闭)。
所以您需要编辑该函数...可能需要做一些工作,但这是开始的地方。
【讨论】:
遇到了同样的问题,这让我得到了这个答案。在我的例子中,我在整个视图中添加了一个点击手势识别器,以便用户可以点击键盘以外的任何地方来关闭它。谢谢!【参考方案2】:你很可能忘记写了:
self.delegate = self
self.dataSource = self
【讨论】:
感谢您的帮助。我检查了 BTNavigationDropdownMenu 的源代码,并且存在这两个调用。以上是关于在 UITableView 单元格滑动中选择“删除”,但未调用“提交编辑样式”的主要内容,如果未能解决你的问题,请参考以下文章
在 iphone sdk 中一起滑动以删除和移动 UItableView 选项中的单元格
iOS 7 UITableView 问题 - 当我们已经有一个单元格时尝试设置滑动以删除单元格
在uitableview单元格上留下滑动删除按钮打开然后返回导致崩溃