UINavigationBar:拦截后退按钮和后退滑动手势

时间:2014-04-19 15:29:52

标签: ios uinavigationbar swipe back

我有一个UINavigationBar拦截后退按钮,如果有未保存的更改则会提醒用户。这是基于UINavigationController and UINavigationBarDelegate.ShouldPopItem() with MonoTouch中使用UINavigationBarDelegate协议并实现- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;

的解决方案

现在,iOS7已经引入了向后移动的手势,我也想拦截它,但是无法使用我迄今为止找到的解决方案,即使用{ {1}}和

[self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)];

虽然这会弹出视图,但它会保留导航栏按钮,所以我最终会得到一个无处可用的后退按钮,以及我添加到导航栏的所有其他导航按钮。有什么提示吗?

1 个答案:

答案 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:

中弹出控制器

希望这有一些帮助。