在视图控制器上启用滑动,但在该 VC 的视图中禁用

Posted

技术标签:

【中文标题】在视图控制器上启用滑动,但在该 VC 的视图中禁用【英文标题】:enable swipe on view controller, but disable within a view in that VC 【发布时间】:2013-01-20 05:53:26 【问题描述】:

我有一个 UIViewController,我有 2 个 UISwipeGestureRecognizers 处理撤消和重做(向右滑动以撤消,向左滑动以重做)。在这个 VC 中,我还有一个 UIView,它跟踪触摸开始/移动/结束以更改另一个 UIView 上的颜色。顺便说一句,撤消/重做与颜色变化有关。

我遇到的问题是,当我在换色器视图中执行触摸事件时,它们有时会被解释为滑动并且正在发生撤消/重做。

我怎样才能只为有问题的 UIView 禁用滑动手势,但保留在 VC 的其他区域执行滑动的能力?

【问题讨论】:

【参考方案1】:

让视图控制器成为手势识别器的委托,然后实现这个委托方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 

    return touch.view != self.mySubviewToExclude;

【讨论】:

谢谢。我在那里得到了所有这些,并且正在调用委托方法,但是来自 GR 的视图不是换色器子视图。我也试过 iskindof 但没有运气。我是否需要在子视图上实现 GR 委托才能使其正常工作?目前颜色选择器视图没有它实现的协议,只是触摸开始/移动/结束。 gestureRecognizer.view 最终与 self.view 的值相同,其中 self 是 VC。两个滑动手势识别器在 VC 中定义为 swipeRight.delegate=self 和 swipeLeft.delegate=self。不知道我在这里做错了什么,但到目前为止还没有运气。 是的,但您不应将其与 self.view 进行比较。您必须将其与要排除的视图进行比较。 gestureRecognizer.view 永远不会是换色器视图的值。它始终是 self.view 的值 天哪。我的错。这是我们关心的触摸视图。我会编辑更正。对此感到抱歉。

以上是关于在视图控制器上启用滑动,但在该 VC 的视图中禁用的主要内容,如果未能解决你的问题,请参考以下文章

如何根据文本视图内容大小设置滚动视图中的启用或禁用滚动?

当用户没有完全滑动以删除表格视图单元格时,如何禁用/启用编辑按钮?

如何启用或禁用特定 ViewController 的横向模式?

如何以编程方式为特定视图控制器禁用/启用睡眠模式?

如何在当前 vc 上获得 largeTitle,但在 vc 上获得小标题?

如何从 UIPageViewController 中的视图控制器返回上一个 VC 或下一个 VC?