使用PKRevealController进行滑动导航

4
我有一个带前视图和右视图的PKRevealController。启用了滑动手势,因此我可以通过滑动打开右侧视图 - 很好。向另一个方向滑动不会做任何事情,因为没有左侧控制器可以打开 - 很好。所以,我想实现一种从左到右的滑动,触发我的应用程序的后退导航。
我将滑动手势识别器添加到我的(前)视图控制器中 - 什么也没有发生。
如果在揭示控制器上设置setRecognizesPanningOnFrontView:NO,则我新添加的手势识别器就会起作用 - 我可以进行后退导航。
所以,现在只能选择其中一个。我想要两个都有。怎么做?
1个回答

2
我已经实现了自己的解决方案。实际上,我需要两个解决方案,因为当我允许和禁止 PKRevealController 的滑动操作时需要不同的解决方案。 情况1: setRecognizesPanningOnFrontView:NO 这种情况非常简单 - 我只需添加一个UISwipeGestureRecognizer调用我的back方法:
UISwipeGestureRecognizer *backSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(back)];
[backSwipe setDirection:UISwipeGestureRecognizerDirectionRight];
[self.view addGestureRecognizer:backSwipe];

案例2: setRecognizesPanningOnFrontView:YES

这个稍微有点复杂。为了避免手势识别冲突,我不得不利用PKRevealController的手势识别器。当然,只有在PKRevealController没有leftViewController时才实现这一点。

因此,我将想要实现后滑导航的类注册为通知的监听器:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(back:)
                                             name:NOTIFICATION_BACK_SWIPE
                                           object:self];

然后在PKRevealController.m文件中,在- (void)moveFrontViewRightwardsIfPossible方法中,只需发布通知:

[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_BACK_SWIPE object:[(UINavigationController *)self.frontViewController topViewController]];

在这里,我将 UIViewController 本身作为通知对象传递。我这样做是为了只让特定的 UIViewController 实例对此通知做出反应。否则,如果您在 UINavigationController 堆栈中有更多订阅接收此通知的 UIViewControllers,它们都会导致 UINavigationController 弹出视图控制器 (popViewController),这将导致向后随机步数,而我们希望这仅发生一次。

就是这样。享受吧。


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