我已經實現了我自己的解決方案。實際上有兩種解決方案,因爲當我允許並且不允許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
實例對此通知作出反應。否則,如果在訂閱接收此通知的UINavigationController
堆棧中有更多UIViewControllers
,則它們全部會導致UINavigationController
至popViewController
,這會導致隨機數步回退,而我們只希望這種情況只發生一次。
就是這樣。請享用。