2016-12-31 71 views
0

我在我的tableview禁用子类使用delaysContentTouches添加自定义识别延迟

delaysContentTouches = false 
subviews.forEach { ($0 as? UIScrollView)?.delaysContentTouches = false } 

但在我的部分之一,我还是想保留的延迟。有没有办法取消某些部分的延迟,或者我可以添加一个自定义识别延迟的一节?

回答

0

部分不是tableView中的实际对象,所以我对你的第一个问题的回答是否定的。 .delaysContentTouches适用于整个tableView。

对于你的第二次查询,我相信有一种可能的方式是通过为所需单元格的scrollView子视图设置延迟。在您的tableView(cellForRowAt:indexPath)FUNC,你可以有这样的事情:

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)FUNC像这样:

let press = UILongPressGestureRecognizer(target: self, action: #selector(handlePress)) 
press.minimumPressDuration = 2.0 //however long you want 
cell.addGestureRecognizer(press) 

无论你正在试图通过选择您的tableView的某些行实现可以被放置在handlePress FUNC高于此会在长时间按下时触发。

+0

我也发现了类似你已发布的答案。不幸的是,它不工作(了)。单元格在子视图中也没有任何'UIScrollView'。 –

+0

@HennyLee是的,我不确定它是否仍在使用。检查我的更新后的帖子是否有其他建议。 –