禁止手机侧滑返回上一个页面的三种方法

禁止手机侧滑返回上一个页面的三种方法
侧滑返回上一个页面用户体验很很好。但是在特别的场景侧滑返回上一个页面严重影响用户体验:
1.如正在斗地主,结果在出牌时,由于出最左边的牌时,不小心触发了侧滑离开斗地主页面。你说烦不烦。更离谱的是有的app,这个斗地主是随机的。你离开后再想进入继续在原来的斗地主,结果发现没有斗地主的入口。结果只能由系统托管了。你说烦不烦。所以这样的页面摇禁止侧滑返回上一个页面,而是通过在左上交点击退出返回上一层页面。
2.在登陆页面,结果由于侧滑导致不登陆就返回原来的页面出现各种报错。所以登陆页面也要设置侧滑放回上一个页面。
方法一:一般的页面只需要这样设置就可以禁止侧滑返回上一个页面。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    // 开启返回手势
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    // 开启返回手势
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
}

方法二:问题是有的页面这样设置无效。那么只能来猛药了。找到弹出手势时间,禁止它,离开时设置放开它。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    
    [self.playerView startPlaying];
    [self popGestureChange:self enable:NO];
//    // 开启返回手势
//    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
//        self.navigationController.interactivePopGestureRecognizer.delegate = self;
//    }
}
-(void)popGestureChange:(UIViewController *)vc enable:(BOOL)enable{

    if ([vc.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {

        //遍历所有的手势

        for (UIGestureRecognizer *popGesture in vc.navigationController.interactivePopGestureRecognizer.view.gestureRecognizers) {

            popGesture.enabled = enable;

        }

    }

}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.playerView pausePlaying];
    [self popGestureChange:self enable:YES];
//    // 开启返回手势
//    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
//        self.navigationController.interactivePopGestureRecognizer.delegate = nil;
//    }
    self.navigationController.navigationBar.hidden = NO;
}

方法三:若以上两种方法皆无效,采用终极方法:禁止平移手势。也可以采用重载平移手势来实现拦截平移返回上一个页面时只弹一个选择框而不返回。具体重载方法这里就不说了,采用最简单的。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    // 开启返回手势
    id traget = self.navigationController.interactivePopGestureRecognizer.delegate;
    UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil];
    [self.view addGestureRecognizer:pan];
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值