UINavigationBar:拦截后退button和后滑动手势

我有一个UINavigationBar,截获后退button,提醒用户是否有更改。 这是基于在UINavigationController和UINavigationBarDelegate.ShouldPopItem()中使用UINavigationBarDelegate协议和实现- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;

现在,iOS7已经引入了滑回手势,我也想拦截它,但无法使用到目前为止我find的解决scheme,即使用[self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)];

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

虽然这确实popup的意见,它留下的导航栏button,所以我结束了一个后退button,无处不在,以及我已经添加到导航栏的所有其他导航button。 有小费吗?

要拦截向后滑动手势,可以将self设置为手势的代表( <UIGestureRecognizerDelegate> ),然后根据未保存的更改从gestureRecognizerShouldBegin返回YES或NO:

 // 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:popup控制器alertView clickedButtonAtIndex:

希望这个对你有帮助。