4

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

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

如果我在显示控制器上设置了 RecognizesPanningOnFrontView:NO,那么我新添加的手势识别器就可以工作了——我可以向后导航。

所以,现在要么是一个,要么是另一个。我两个都想要。我怎样才能做到这一点?

4

1 回答 1

2

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

案例一setRecognizesPanningOnFrontView:NO

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

UISwipeGestureRecognizer *backSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(back)];
[backSwipe setDirection:UISwipeGestureRecognizerDirectionRight];
[self.view addGestureRecognizer:backSwipe];

案例2setRecognizesPanningOnFrontView:YES

这个稍微复杂一些。为了避免手势识别器冲突,我不得不使用PKRevealController's 手势识别器。当然,我只在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实例对这个通知做出反应。否则,如果您UIViewControllersUINavigationController堆栈中有更多订阅接收此通知,它们都会导致UINavigationControllerto popViewController,这将导致随机数的后退,而我们希望这种情况只发生一次。

就是这样。享受。

于 2014-01-06T22:15:22.160 回答