ios – 使用PKRevealController滑动导航

我有一个带前视图和右视图的PKRevealController.平移手势已启用,因此我可以通过滑动打开正确的视图 – 很棒.以另一种方式滑动不会做任何事情,因为它不应该,因为没有左控制器可以打开 – 很棒.所以相反,我想实现一个滑动(从左到右),这将触发我的应用程序的后退导航.

我在我的(前)视图控制器中添加了一个滑动手势识别器 – 没有任何反应.

如果我在揭密控制器上setRecognizesPanningOnFrontView:NO,那么我新添加的手势识别器可以工作 – 我可以导航回来.

所以,现在它是一个或另一个.我想要两个.我怎样才能做到这一点?

最佳答案 我已经实现了自己的解决方案.实际上有两个解决方案,因为当我允许和禁止PKRevealController滑动操作时,我需要不同的解决方案.

案例1:setRecognizesPanningOnFrontView:NO

这种情况很简单 – 我只需添加一个调用我的后退方法的UISwipeGestureRecognizer:

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,这将导致随机数量的步骤,而我们希望这只发生一次.

而已.请享用.

点赞