我有一个 UINavigationBar 可以拦截后退按钮点击,如果有未保存的更改,则会提醒用户。这是基于中提出的解决方案UINavigationController 和 UINavigationBarDelegate.ShouldPopItem() 与 MonoTouch https://stackoverflow.com/questions/6413595/uinavigationcontroller-and-uinavigationbardelegate-shouldpopitem-with-monotouc使用 UINavigationBarDelegate 协议并实现- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
现在,iOS7引入了滑动返回手势,我也想拦截它,但无法让它与我迄今为止找到的解决方案一起使用,即使用[self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)];
and
- (void)handlePopGesture:(UIGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateEnded) {
[self popViewControllerAnimated:NO];
}
}
虽然这确实会弹出视图,但它会将导航栏按钮留在原处,因此我最终会得到一个无处可去的后退按钮,以及我添加到导航栏的所有其他导航按钮。有小费吗?
要拦截向后滑动手势,您可以设置self
作为手势的代表(<UIGestureRecognizerDelegate>
),然后返回 YES 或 NOgestureRecognizerShouldBegin
基于未保存的更改:
// 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:
希望这个对你有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)