美文网首页
UINavigationController的pop手势处理

UINavigationController的pop手势处理

作者: oncezou | 来源:发表于2016-07-20 16:05 被阅读48次

问题:根据产品需求有时候,要求某些界面不允许pop手势返回,有些界面允许pop手势返回

解决:我们统一在UINavigationController类处理,然后在界面实现

@interface MyNavigationController ()<UIGestureRecognizerDelegate>

@end

@implementation MyNavigationController

- (void)viewDidLoad
{
    [super viewDidLoad];

    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.delegate = self;
    }   
}

//实现代理方法
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if (gestureRecognizer == self.interactivePopGestureRecognizer) {
        if (self.viewControllers.count == 1) {
            return NO;
        }else {
            id <UIViewControllerTransitionCoordinator> coordinator = [self transitionCoordinator];
            if ([coordinator isAnimated]) {// 如果有ViewController之间的转场动画
                return NO;
            }
        }
    }
    
    return YES;
}

//在界面实现
@interface ManualQuotingViewController ()
{   
    //保留上一个界面的pop手势属性
    BOOL            _lastInteractivePopGestureRecognizer;
}
@end

@implementation ManualQuotingViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _lastInteractivePopGestureRecognizer = self.navigationController.interactivePopGestureRecognizer.enabled;
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;    
}

// 在界面消失时,还原原先的pop手势属性
- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    self.navigationController.interactivePopGestureRecognizer.enabled = _lastInteractivePopGestureRecognizer;
}

相关文章

网友评论

      本文标题:UINavigationController的pop手势处理

      本文链接:https://www.haomeiwen.com/subject/lkbvjttx.html