我已经实现了自己的解决方案。实际上有两种解决方案,因为当我允许和禁止PKRevealController
滑动操作时,我需要不同的解决方案。
案例一:setRecognizesPanningOnFrontView:NO
这种情况很简单 - 我只需添加一个UISwipeGestureRecognizer
调用我的方法的back
方法:
UISwipeGestureRecognizer *backSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(back)];
[backSwipe setDirection:UISwipeGestureRecognizerDirectionRight];
[self.view addGestureRecognizer:backSwipe];
案例2:setRecognizesPanningOnFrontView: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
实例对这个通知做出反应。否则,如果您UIViewControllers
在UINavigationController
堆栈中有更多订阅接收此通知,它们都会导致UINavigationController
to popViewController
,这将导致随机数的后退,而我们希望这种情况只发生一次。
就是这样。享受。