iOS右滑返回

本文详细介绍了在iOS应用中实现自定义导航栏的右滑返回功能的方法,包括三种不同方案的优缺点及代码实现,并提供了解决手势误触发的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


iOS系统支持边缘右滑返回,但这样的前提是用的是系统的navigationItem的backBarButtonItem。

但是很多情况下我们的navigationItem都是自定义的,这样就回失去右滑返回的效果。建议大家如果有需要自定义的nav,最好整个app内统一都用自定义的nav bar来写,不然添加右滑返回后,可能会出现导航条错乱的问题


方法一:在baseController的viewDidLoad里写如下代码

              self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;

              但是我试了这样的方法,可能引起程序卡死甚至崩溃。查了网上很多方法,都试了但是也没有解决我的问题,所以我没有采用这个方法


方法二:在baseControllerviewDidLoad里添加

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(back:)];

               swipe.delegate = self;

              [self.view addGestureRecognizer:swipe];

              self.navigationController.interactivePopGestureRecognizer.enabled = NO;

           然后实现back方法

             - (void)back:(UISwipeGestureRecognizer*)swipe {

                     if (self.navigationController.viewControllers.count <= 1) return;

                     [self.navigationController popViewControllerAnimated:YES];

              }

          方法二的弊端也很明显,不能看到右滑的中间态,只要触发右滑手势就回返回到上一级目录


方法三:在baseControllerviewDidLoad添加

               id target = self.navigationController.interactivePopGestureRecognizer.delegate;

              UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target            action:@selector(handleNavigationTransition:)];

              pan.delegate = self;

              [self.view addGestureRecognizer:pan];   

              self.navigationController.interactivePopGestureRecognizer.enabled = NO;

这样后发现不光是向右滑动,连向左滑动也会返回,不要着急,再加我下边的这个方法就搞定啦。

            

          - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {

                 CGPoint point = [gestureRecognizer translationInView:self.view];

                 if (point.x > 0) {

                        return YES;

                 } else {

                       return NO;

                 }

          }

搞定了,可以试试哦,有什么问题可以直接留言,我们一起讨论哦


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值