2014-04-19 5 views
2

У меня есть UINavigationBar, который перехватывает нажатие кнопки «Назад», которое предупреждает пользователя о наличии несохраненных изменений. Это основано на решении, представленном в UINavigationController and UINavigationBarDelegate.ShouldPopItem() with MonoTouch с использованием протокола UINavigationBarDelegate и реализации - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;UINavigationBar: кнопка перехвата назад и обратный сабля

Теперь iOS7 представила жест салфетки навынос-назад, и я хотел бы перехватывать, что хорошо, но не может заставить его работать с решениями, которые я нашел до сих пор, а именно с помощью [self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)]; и

- (void)handlePopGesture:(UIGestureRecognizer *)gesture { 
    if (gesture.state == UIGestureRecognizerStateEnded) { 
     [self popViewControllerAnimated:NO]; 
    } 
} 

Хотя это поп взгляды, он оставляет навигационные кнопки панели на месте, так что я в конечном итоге с задней которая не ведет никуда, а также другую навигационную кнопку, добавленную в навигационную панель. Какие-нибудь советы?

ответ

3

Для перехвата назад салфетки жеста вы можете установить self в качестве делегата от жеста (<UIGestureRecognizerDelegate>), а затем вернуться ДА или НЕТ от gestureRecognizerShouldBegin на основе несохраненных изменений:

// in viewDidLoad 
self.navigationController.interactivePopGestureRecognizer.delegate = self; 

// ... 
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if ([gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) { 

     if (self.dirty) { 
      // ... alert 
      return NO; 
     } else 
      return YES; 
    } else 
     return YES; 
} 

В чеке вы можете попросить пользователь, если она хочет вернуться в любом случае, и в этом случае поп контроллера в alertView clickedButtonAtIndex:

Надеюсь, это поможет.

+0

Спасибо, работает как очарование! – Gereon

+0

Я ожидал увидеть некоторые проблемы, если я изменил делегат распознавателя жестов по умолчанию, но пока не видел. Делегат по умолчанию является объектом класса _UINavigationInteractiveTransition. Я поменял его на свой подклас UINavigationController и, похоже, работает нормально. – arlomedia

Смежные вопросы