如何解决UITableViewCell 滚动时意外点击
我有一个 UITableView。每一行都是可点击的并触发一个操作(点击更新单元格内容,在主线程上,然后在后台线程中的 CoreData 中添加一些内容)。
我正在使用
func tableView(_ tableView: UITableView,didHighlightRowAt indexPath: IndexPath)
在 UITableViewDelegate
中检测点击,因为根据我的经验,使用此方法点击行比使用 didSelectRowAt
更具反应性,并且我希望用户能够按顺序快速点击几次在同一行,就像一个理货。
但现在我遇到一个问题,即有时只是滚动 tableview 可能会意外触发点击操作。
就好像在开始滚动手势时手指第一次触摸屏幕一样,单元格注册的是点击而不是“开始滚动”。 UITableViewCell 现在有点过于敏感了。
我想也许我可以停止使用 didHighlightRowAt
,而是在每个 UITableViewCell 上添加一个手势识别器,并且仅在识别器没有看到滚动时才触发操作,但感觉不对。
达到某种中间立场的方法是什么?
我的意思是,让单元格保持反应,但避免在用户刚开始滚动时触发点击。也许我在这种情况下使用 didHighlightRowAt
犯了一个错误?
编辑:它甚至在应用启动后立即发生。我只是第一次能够重现它:如果手指在开始滚动手势之前停留在单元格上很短时间,就会发生这种情况。我猜这是有道理的:触摸该行并突出显示它,即使手指没有从屏幕上抬起。我没有注意到,因为我总是快速向上滑动来滚动,我的手指从不停留在屏幕上。
解决方法
我猜你的问题是当滚动单元格被重用并且它们的状态保持突出显示时,didHighlightRowAt
委托方法被调用。一种可能的解决方案是在自定义单元格子类中重置 prepareForReuse
中突出显示的值:
override func prepareForReuse() {
super.prepareForReuse()
isHighlighted = false
}
或者您也可以使用 shouldHighlightRowAt 委托方法检查是否应突出显示单元格。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。