我有一个带前视图和右视图的PKRevealController。平移手势已启用,因此我可以通过滑动打开正确的视图 - 很棒。以另一种方式滑动不会做任何事情,因为它不应该,因为没有左控制器可以打开 - 很棒。所以相反,我想实现一个滑动(从左到右),这将触发我的应用程序的后退导航。
我在我的(前方)视图控制器中添加了一个滑动手势识别器 - 没有任何反应。
如果我在揭密控制器上设置了setRecognizesPanningOnFrontView:NO,那么我新添加的手势识别器就可以了 - 我可以向后导航。
所以,现在它是一个或另一个。我想要两个。我怎么能这样做?
答案 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
订阅了此通知,则会导致UINavigationController
到popViewController
,这会导致随机数我们希望这只发生一次的步骤。
就是这样。享受。