我有一个UITableView
,其每个单元格都包含一个只能水平滚动的UIScrollView
。
我想触发UITableViewCell
的水平滚动,只要例如x上的速度比y上的速度快至少2倍。如果不是这样,那么UITableView
通常可以垂直滚动。
到目前为止,我已尝试继承我的UITableView
并覆盖gestureRecognizerShouldBegin
。但它没有奏效,因为我意识到我的水平gestureRecognizerShouldBegin
(每个单元格的顶部之一)的UIScrollView
首先被调用。
所以我决定覆盖水平gestureRecognizerShouldBegin
上的UIScrollView
:
override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer is UIPanGestureRecognizer {
let velocity = (gestureRecognizer as! UIPanGestureRecognizer).velocityInView(tableView)
return fabs(velocity.x) > fabs(velocity.y) * 2
}
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
问题是我返回false
然后UITableView没有滚动(gestureRecognizerShouldBegin
甚至没有被调用)。
我该如何解决这个问题?为什么它会像这样?
答案 0 :(得分:0)
您是否尝试将ScrollView上的canCancelContentTouches
设置为false?
答案 1 :(得分:0)
我会禁用UIScrollView
的手势,我会覆盖表格的手势识别器。
平移启动后,您将保留对“tapped”单元格的引用,并根据条件的值,您可以以编程方式/手动滚动表格或单元格内的UIScrollView
。 UIScrollView
和UITableView
有不同的方法来设置(滚动)内容偏移量。