我在tableview子类中使用以下方法禁用delaysContentTouches
:
delaysContentTouches = false
subviews.forEach { ($0 as? UIScrollView)?.delaysContentTouches = false }
但在我的一个部分中,我仍然希望保持延迟。有没有办法取消某些部分的延迟,或者我可以为某个部分添加自定义识别器延迟?
答案 0 :(得分:0)
章节不是tableView中的实际对象,所以我对你的第一个问题的回答是否定的。 .delaysContentTouches
适用于整个tableView。
对于您的第二次询问,我认为可能的一种方法是通过设置所需单元格的延迟来实现。 scrollView子视图。在tableView(cellForRowAt:indexPath)函数中,您可以使用以下内容:
if indexPath.section == 3 { //or whatever your desired section is
for view in cell.subviews {
if view is UIScrollView {
let currentView = view as! UIScrollView
currentView.delaysContentTouches = true
}
}
}
这将在您所需部分的单元格子视图中找到UIScrollView。然后它会相应地设置.delaysContentTouches
属性。
我没有亲自执行此代码,只是研究了它,所以让我知道它是否有效。
修改强>
显然,UITableViewCell中的UIScrollView已被弃用,因此上述方法将不再适用。
我的下一个最佳建议是使用UILongPressGuestureRecognizer。这与延迟触摸不会完全相同,但在实际执行中可能会产生类似的效果。
您可以在同一个tableView(cellForRowAt:indexPath)函数中使用它,如下所示:
let press = UILongPressGestureRecognizer(target: self, action: #selector(handlePress))
press.minimumPressDuration = 2.0 //however long you want
cell.addGestureRecognizer(press)
无论你想通过选择tableView的某些行来实现什么,都可以放在上面的handlePress
func中,这将在长按时被触发。