使用PKRevealController滑动导航

时间:2013-07-19 10:14:35

标签: ios uigesturerecognizer

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

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

如果我在揭密控制器上设置了setRecognizesPanningOnFrontView:NO,那么我新添加的手势识别器就可以了 - 我可以向后导航。

所以,现在它是一个或另一个。我想要两个。我怎么能这样做?

1 个答案:

答案 0 :(得分: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实例才会对此通知作出反应。否则,如果UIViewControllers堆栈中有更多UINavigationController订阅了此通知,则会导致UINavigationControllerpopViewController,这会导致随机数我们希望这只发生一次的步骤。

就是这样。享受。