2013-07-19 76 views
4

我有一個PKRevealController與正面和正確的看法。平移手勢已啓用,所以我可以用滑動打開正確的視圖 - 非常棒。換另一種方式不會做任何事情,因爲它不應該這樣做,因爲沒有左側控制器可以打開 - 太棒了。相反,我想實現一個滑動(從左到右),這將觸發我的應用程序的後退導航。滑動導航與PKRevealController

我已經在我的(前)視圖控制器中添加了滑動手勢識別器 - 沒有任何反應。

如果我在揭示控制器上設置RecognizablePanningOnFrontView:NO,那麼我新添加的手勢識別器就可以工作 - 我可以導航回去。

所以,現在它是一個或另一個。我想要兩個。我怎樣才能做到這一點?

回答

2

我已經實現了我自己的解決方案。實際上有兩種解決方案,因爲當我允許並且不允許PKRevealController滑動操作時,我需要不同的解決方案。

案例1setRecognizesPanningOnFrontView:NO

這種情況是很容易 - 我只需要添加一個UISwipeGestureRecognizer調用我的back方法:

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

案例2setRecognizesPanningOnFrontView: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,則它們全部會導致UINavigationControllerpopViewController,這會導致隨機數步回退,而我們只希望這種情況只發生一次。

就是這樣。請享用。