忽略 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 组件?