我有一个UINavigationBar拦截后退按钮,如果有未保存的更改则会提醒用户。这是基于UINavigationController and UINavigationBarDelegate.ShouldPopItem() with MonoTouch中使用UINavigationBarDelegate协议并实现- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
现在,iOS7已经引入了向后移动的手势,我也想拦截它,但是无法使用我迄今为止找到的解决方案,即使用{ {1}}和
[self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)];
虽然这会弹出视图,但它会保留导航栏按钮,所以我最终会得到一个无处可用的后退按钮,以及我添加到导航栏的所有其他导航按钮。有什么提示吗?
答案 0 :(得分:6)
要拦截后滑动手势,您可以将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:
希望这有一些帮助。