加载中…
个人资料
iOS灬菜鸟_阿玮
iOS灬菜鸟_阿玮
  • 博客等级:
  • 博客积分:0
  • 博客访问:81,414
  • 关注人气:11
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

iOS卡顿,push多次同一个页面

(2017-11-23 15:03:16)
标签:

ios卡顿

push多次

分类: iOS零碎

场景:快速多次点击事件跳转到另一个页面,导致同一个界面多次被push造成叠加。

原因:push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面正好在reloadData卡住主线程。造成点击cell时卡住了。

解决方法:

重写导航控制器的push方法,通过获取导航的代理方法来防止多次push界面的bug,亲测有效!

//  Created by iMac-1 on 2017/11/23.

//  Copyright © 2017年 iOS_阿玮. All rights reserved.

//


#import "RMNavigationController.h"


@interface RMNavigationController ()

@end


@implementation RMNavigationController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.delegate = self;

}


- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

{

    //这个方法是在当前控制器执行push的时候,禁止手势右划返回,避免出现crash的现象,(也可以不实现好像也没什么影响)

    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {

        self.interactivePopGestureRecognizer.enabled = NO;

    }

    //判断上一个控制器和现在的控制器是不是同一个,如果是,返回。如果不是push到当前控制器,这就有效避免了同一个控制器连续push的问题

    if ([self.topViewController isMemberOfClass:[viewController class]]) {

        return;

    }

    

    [super pushViewController:viewController animated:animated];

}



- (void)navigationController:(UINavigationController *)navigationController

       didShowViewController:(UIViewController *)viewController

                    animated:(BOOL)animate

{

    

    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {

        self.interactivePopGestureRecognizer.enabled = YES;

    }

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

 

}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有