UINavigationController的pop手势处理

问题:根据产品需求有时候,要求某些界面不允许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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,283评论 4 61
  • 20天。这一天一天,都被我过过来了。也许现在还没资格说这句话,但这确实是活了二十几年第一次怀着执念。尽管它前途未卜...
    离争阅读 340评论 0 0
  • 辞了寒假实习,周末在家调整下状态并有幸用这些时间读完了李笑来的《七年就是一辈子》。与上个月读完的《把时间当作朋友》...
    糖不甩甩甩阅读 351评论 0 1
  • 笔者一直很羡慕那些搭建了个人博客的大牛,在最近工作之余也尝试着搭建了自己的博客,历时1周,这篇文章就将踩过的坑记录...
    彬彬酱阅读 2,204评论 0 5