UITableViewCell点击跳转延迟

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

解决方案


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

UITableViewCell点击跳转延迟_第1张图片
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的话就完全没问题。

你可能感兴趣的:(UITableViewCell点击跳转延迟)