2015-02-06 70 views
2

我有一个UITableView,我想自然滚动自己。不过,我也有自己的手势识别器,它也被同时识别(通过返回YESgestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)。暂时禁用一个手势识别器,而另一个正在触发

在我的手势处理程序计算出某个点后,我想暂时停止表视图处理其自身基础手势的手势变化。这是因为此时我正在调整表格视图的大小,并且在发生这种情况时我不希望它滚动(但仍然滚动到调整大小时开始生效的位置)。

我试过在gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:中录制另一个手势识别器,它似乎确定了正确的那个,因为它显示为UIScrollViewPanGestureRecognizer。然而,我对自己的处理程序中的识别器没有任何影响。

有人会认为设置otherRecognizer.enabled = NO应该做的伎俩,但它没有任何效果。

也许表视图在我之前接收到它的手势事件,因此在那时禁用它并不会产生任何效果,但即使如此,您仍会认为它会在下一个更改事件中被禁用,但事实并非如此。

我很难过。如何在不完全取消手势的情况下暂时阻止来自接收/处理手势的表格视图?

更新:

当我登录otherRecognizer,它显示为UIScrollViewPanGestureRecognizer类型的对象,但是它的状态是Failed。我也注意到,实际上有很多拨打gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:(即使是多个UIScrollViewPanGestureRecognizer),所以也许我只是记录和禁用错误的一个......但是我怎么知道我想要的是哪一个呢?

更新2:

如果我设置tableView.panGestureRecognizer.enabled = NO在我自己的手势处理机内适当的时候,它让我的一半也-表不再滚动一旦我开始调整其大小。但是,将其重新设置为启用不会重新激活该手势,并且不再处理任何进一步滚动,直到新手势开始。

更新3:

我结束了“解决”这种通过手动调整滚动视图的内容的手势期间偏移。它似乎工作正常,但我仍然对真正的答案感到好奇。

回答

1

UITableView是一个UIScrollView。 UIScrollView具有panGestureRecognizer属性。这是手势识别器,它响应用户在桌面视图上移动手指。

但是,这与您在调整表格视图大小时滚动位置的变化无关。用户没有做任何事 - 你是。所以没有任何姿态,也没有什么可以认出的。如果你想控制滚动视图正在做什么,你需要直接控制它。您可以使用UITableView方法,UIScrollView方法和UIScrollView委托。

如果没有更清晰的问题陈述,很难提供进一步的建议,但在我看来,回答质疑确实问的是您正在吠叫错误的树。但也许不是;也许你手势调整表视图的大小,你没有在问题中明确这一点?在这种情况下,请尝试禁用panGestureRecognizer。或者,更好的是,暂时关闭表格视图的所有用户交互并在其他地方检测此手势。

+0

调整大小,我手动在我自己的手势处理程序。基本上,当用户在其外滚动时,表格视图会调整大小。但问题是,它正在调整它*保持滚动*。由于表格视图位于窗口的底部并且正在向上调整大小,因此表格不再显示为遵循手指,而是滚动两倍的速度。 – devios1 2015-02-06 01:46:44

+0

表视图的'panGestureRecognizer'属性是朝正确方向迈出的一步 - 感谢!看到我的更新2。 – devios1 2015-02-06 01:49:43