将UITableView的滑动限制为一个手指

5

我有这样一种情况,在一个主要的UIView中有两个UITableView作为子视图:

UIView(框架=全屏幕)
+--- UITableView(框架=屏幕的约1/3)
+--- UITableView(框架=第二个屏幕的约1/3)

我想检测在整个屏幕区域上进行三指向上滑动事件(并且也允许用户用至少一根手指来移动UITableViews)。

我已经给UIView附加了一个UISwipeGestureRecognizer,并设置numberOfTouchesRequired = 3

我尝试了以下方法:

  • 在两个UITableViews上都将内部UIPanGestureRecognizers的maximumNumberOfTouches设置为1。据我理解,这应该防止在UITableViews上进行双手和三手指移动,但它没有生效。(如果我在这些UIPanGestureRecognizers上设置enabled为NO,则触摸正确传递到父视图。但此时无法进行拖动/滚动。)
  • 在两个UITableViews上使用panGestureRecognizer requireGestureRecognizerToFail:调用我的UISwipeGestureRecognizer。这部分可以工作,但是移动操作要等到滑动完成后才能正常进行,感觉非常笨拙。
  • 重写UITableView并设置shouldRecognizeSimultaneouslyWithGestureRecognizer:返回YES,这使我可以检测到三根手指向上滑动的操作。但是,下面的UITableViews会意外地移动/滚动。

那么,如何限制拖动触摸数量为1(或2),同时让三指UISwipeGestureRecognizer识别出三指向上滑动事件呢?

1个回答

0

尝试在顶部(整个屏幕)UIPanGestureRecognizer上覆盖canPreventGestureRecognizer:,对于两个表视图手势识别器中的每一个返回NO

我还会尝试在每个表视图手势识别器上覆盖canBePreventedByGestureRecognizer:,在最顶部的UIPanGestureRecognizer的情况下返回NO

我曾经遇到过与您类似的情况,但已经很久了,我不记得我是如何解决它的(该项目已经不存在了),但我似乎记得玩弄上述方法并最终使其正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接