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的跳转:
    1
    2
    3
    4
    5
    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的话就完全没问题。