使用UINavigationController遇到的坑

遇到的问题:

频繁跳转页面,偶尔出现界面卡死,不响应任何手势,点击事件

原因:

在视图Push过程中,且Push尚未完成时触发了Pop,可能会导致界面卡死,不响应任何手势,点击事件

解决方法:

重写Push事件,在Push过程中禁用其他操作,包括滑动返回手势

#import "MyNavigationViewController.h"

@interface MyNavigationViewController ()<UINavigationControllerDelegate,UIGestureRecognizerDelegate>
@property (assign, nonatomic) BOOL isSwitching;

@end

@implementation MyNavigationViewController

- (void)viewDidLoad {
    [super viewDidLoad];
  
    self.delegate = self;
    self.interactivePopGestureRecognizer.delegate = self;

}
/**
 *  重写push方法
 */
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    self.interactivePopGestureRecognizer.enabled = NO;

    if (animated) {
        if (self.isSwitching) {
            return; // 1. 如果是动画,并且正在切换,直接忽略
        }
        self.isSwitching = YES; // 2. 否则修改状态
    }
    
    // 所有设置搞定后, 再push控制器
    [super pushViewController:viewController animated:animated];
}

#pragma mark - UINavigationControllerDelegate
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    self.interactivePopGestureRecognizer.enabled = [self.viewControllers count] > 1 ; 

    self.isSwitching = NO; // 3. 还原状态
    
}
@end
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,755评论 4 61
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,741评论 7 249
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,695评论 25 709
  • ✿ 晓晨花露 两岸青山相对出, 车子无言向前奔, 先生独坐泪无言, 花儿羞见躲地层, 太阳害羞入西边, 忽传火车声...
    宏昌居士123阅读 2,571评论 0 7
  • 看着熙熙攘攘的人潮、车流,发怔,间或触及与神交融的瞬间,一切的存在都有了意义。 愿你也能静心透过白雾,凝视远方的川流不息
    萬幣猴阅读 1,400评论 0 0

友情链接更多精彩内容