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

场景:快速多次点击cell跳转到另一个页面,另一个页面被push多次。

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

解决方法:

重写导航控制器的push方法。

#import "DemoNavViewController.h"  
  
  
@interface DemoNavViewController () <UINavigationControllerDelegate>  
// 记录push标志  
@property (nonatomic, getter=isPushing) BOOL pushing;  
  
@end  
  
  
@implementation DemoNavViewController  
  
  
- (void)viewDidLoad {  
    [super viewDidLoad];  
      
    self.delegate = self;  
}  
  
  
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated  
{  
    if (self.pushing == YES) {  
        NSLog(@"被拦截");  
        return;  
    } else {  
        NSLog(@"push");  
        self.pushing = YES;  
    }  
      
    [super pushViewController:viewController animated:animated];  
}  
  
  
#pragma mark - UINavigationControllerDelegate  
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated  
{  
    self.pushing = NO;  
}  
  
  
@end 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在点击push下一个页面时,因为各种原因,点一下cell或按钮没有响应,用户可能就多点几下,这时候会打开好几个一样...
    想要飞翔的企鹅阅读 1,717评论 1 0
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,268评论 30 472
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,330评论 1 23
  • 前言 由于最近两个多月,笔者正和小伙伴们忙于对公司新项目的开发,笔者主要负责项目整体架构的搭建以及功能模块的分工。...
    CoderMikeHe阅读 27,236评论 74 270
  • 又梦到了 梦里他少年的模样 都说梦是反的吧 梦里她爱我如生命 她看向我的的眼神 像是海里的漩涡要将我吞没 我在梦里...
    L_aa阅读 250评论 0 0