第二十六篇、因为自定item(nav)而使系统右滑返回手势失效的解决方法

本文介绍如何在iOS应用中实现自定义导航栏及返回按钮,并保持系统默认的滑动手势功能。通过保存和设置系统返回手势的代理,确保自定义导航栏的同时不影响滑动返回的操作。

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

 

@interface ViewController () <uigesturerecognizerdelegate>
@end@implementation ViewController
- (void)viewDidLoad {
        [super viewDidLoad];        // 自定义返回按钮
        UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
        [button setTitle:@"王俨2" forState:UIControlStateNormal];
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
}
 
- (void)back:(UIButton *)button {
        [self.navigationController popViewControllerAnimated:YES];
}
 
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];    if (self.navigationController.viewControllers.count > 1) {          // 记录系统返回手势的代理
        _delegate = self.navigationController.interactivePopGestureRecognizer.delegate;          // 设置系统返回手势的代理为当前控制器
        self.navigationController.interactivePopGestureRecognizer.delegate = self;
    }
}
 
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];     // 设置系统返回手势的代理为我们刚进入控制器的时候记录的系统的返回手势代理
    self.navigationController.interactivePopGestureRecognizer.delegate = _delegate;
}
#pragma mark - UIGestureRecognizerDelegate- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {        return self.navigationController.childViewControllers.count > 1;
}
 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {    return self.navigationController.viewControllers.count > 1;
}@end

 

1.使用自定义nav item之后,默认的右滑返回的手势不可以使用

2.进入控制器之前,把系统的Delegate保存起来,视图加载将要完成设置给默认的右滑手势

转载于:https://www.cnblogs.com/HJQ2016/p/5873907.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值