UITableViewCell点击跳转延迟

在最近的项目中遇到一个很让人费解的问题,就是在StoryBoard中点击tableViewCell跳转另一个controller时,如果使用segue连接,present方式跳转,会有很大概率出现延迟几秒钟的情况,甚至压根儿就不跳转。

解决方案


这个问题困扰了我很久,最后是在苹果的开发者社区找到了答案:https://forums.developer.apple.com/thread/5861

image.png

大意就是:
这是个iOS 8 的bug(只不过延续到了iOS 10,摊手~~),你能通过以下两个办法解决:

  1. 容易的办法就是不要把cell 的selectionStyle 设为None,但是这样界面会很糟糕;
  2. 麻烦的办法是handle住UITableViewDelegate中的didSelectRowAtIndexPath 方法,然后通过这样的方式来触发segue的跳转:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    DispatchQueue.main.async { 
        self.performSegue(withIdentifier: "ToBePresented", sender: self)
    }
}

其实也就是到主线程里去触发。。

结论


1、亲测有效,就是麻烦了一些,如果是静态的tableView,有很多cell需要跳转,类似用户设置这样的界面,就需要挨个儿在代码里设置对应的跳转逻辑。
2、很奇怪的是这个bug只有在sb中controller被present的时候才会出现,用push的话就完全没问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,107评论 3 38
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 4,805评论 1 9
  • 2017.02.22 可以练习,每当这个时候,脑袋就犯困,我这脑袋真是神奇呀,一说让你做事情,你就犯困,你可不要太...
    Carden阅读 1,404评论 0 1
  • iOS 实战开发课程笔记 本贴旨在作为对极客班 《iOS 开发实战》第五期期课程视频重新学习的笔记。目标是建立一个...
    黄穆斌阅读 3,122评论 12 57
  • 今天有点累。 我从不承认自己是个愤青,我一度是一个喜欢置身事外的不负责任的人,后来我将这种心态归结为幼稚和自欺欺人...
    短鱼阅读 216评论 1 2