忽略 UIViewController 中的 UIPanGesture

Posted

技术标签:

【中文标题】忽略 UIViewController 中的 UIPanGesture【英文标题】:Ignore UIPanGesture in UIViewController 【发布时间】:2013-10-07 15:48:35 【问题描述】:

我有一个UINavigationController 有一个UIPanGestureRecognizer

MyNavController.m
...

menuGesture.delegate = self;
[self.view addGestureRecognizer:menuGesture];

效果很好,但我需要在我的topViewControllers 之一中忽略UIPanGestureRecognizer。我试过self.view.gestureRecognizers = nil,但没用。

【问题讨论】:

【参考方案1】:

如果您需要启用/禁用您在控制器中添加的某些手势识别器,一种方法是通过属性公开该手势识别器,然后随意启用/禁用它:

@property(nonatomic, assign/weak) UIPanGestureRecognizer* myGestureRecognizer;

...

[(MyNavController*)myController.navigationController myGestureRecognizer].enabled = NO;

(当然,您的 menuGesture 将存储在 myGestureRecognizer 中以使其正常工作)。

【讨论】:

考虑扩大你的答案,向提问者解释为什么这会达到预期的结果,可能链接到文档。照原样,这只是微不足道的用处。 另外,我如何从topViewController 访问我的gestureRecognizer @JoshuaDwire:我扩展了我的答案。这个想法是,如果你需要在你的类中启用/禁用一个特性,你需要公开一个属性来做这件事......希望这会有所帮助...... 从导航控制器中显示的任何视图控制器中,您可以使用navigationController 属性来访问后者...当然,navigationController 需要一些强制转换才能正常工作,因为它是只有一个通用的UINavigationController...【参考方案2】:

您需要订阅 UIGestureRecognizerDelegate,然后确定是否应在 gestureRecognizer:shouldReceiveTouch: 中允许该手势

【讨论】:

【参考方案3】:

试试这样:UINavigationController 有一个方法叫做

- (void)removeGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

【讨论】:

我不想删除gestureRecognizer。只想在UIViewController上忽略它

以上是关于忽略 UIViewController 中的 UIPanGesture的主要内容,如果未能解决你的问题,请参考以下文章

为啥情节提要 ui 元素未显示在 xcode 9 中的 UIViewController 上

UIViewControllers 中的 UIViewController

从父 UIViewController 类继承 UI 组件?

Sierra 中的安全/协同设计:钥匙串忽略访问控制设置和 UI 提示权限

iOS8 中的 UIViewController 自动布局

将 UIViewController 的 UI 扩展到子 UIViewControllers