iOS小结(解决presentViewController延迟问题)

在 iOS 中,当使用

-(void)presentViewController:(UIViewController*)viewControllerToPresent animated:(BOOL)flag completion:(void (^__nullable)(void))completion

方法进行界面跳转的时候,有时候会出现延迟,这个延迟有时候会有好几秒的时间才会执行 completion,有时候干脆就一直不会跳转。

例如:在tableview的点击方法中执行

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

[self presentViewController:alertViewController animated:YEScompletion:^{

}];

}

alertViewController 跳转延迟很长时间,有时候干脆就不跳转了。但让人头疼的是点击cell的时候,在alertViewController跳转延迟过程中,滑动一下tableview或者再次点击一下cell,alertViewController会立即跳转。

查找了很长时间,总算得出一个原因:由于某种原因,presentViewController跳转时completion的内容并不会真的马上触发执行,除非有一个主线程事件触发这种消费。比如在弹出慢的时候,你随便点击一下屏幕,马上就能弹出来 。

所以得出相应的解决方法:

1.在主线程中执行跳转:

__weak typeof(self)weakSelf = self;

dispatch_async(dispatch_get_main_queue(), ^(void){

[weakSelf presentViewController:alertViewController animated:YES completion:nil];

});

2.在执行跳转前唤醒主线程。

/** WakeUpTheMainThread 方法什么都不执行,它的作用只是唤醒主线程 */

[self performSelectorOnMainThread:@selector(WakeUpTheMainThread) withObject:nil waitUntilDone:NO];

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

相关阅读更多精彩内容

  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,688评论 2 4
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,684评论 1 14
  • 1、设置UILabel行间距 NSMutableAttributedString* attrString = [[...
    十年一品温如言1008阅读 1,990评论 0 3
  • 上官网注册账号 首先来到环信的官网,然后登陆.没有账号先注册一个. 进去之后创建应用,如图 创建应用界面 点击确定...
    loneWolf01阅读 550评论 0 0
  • 我搬到这个小区不久,便总结了一条规律,那就是,每到周一至周四晚上十点钟,会有一双高跟鞋敲击楼梯的声音传来,由下到上...
    荒野石头阅读 838评论 0 2

友情链接更多精彩内容