uitableview - TableView DidSelectRowAt() 延迟
问题描述
您好,我实际上在我的应用程序中使用了 tableview。我有这行代码从 VC 切换到母亲,它在任何地方都可以正常工作:
let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
self.present(vue, animated: true, completion: nil)
在我的 tableView 中,我使用函数 DidSelectRowAt (当我单击行/单元格时执行此操作)来执行此操作(切换 VC)但是当我单击它时您已经了解它可以工作但有延迟。这种延迟有时是 1-2 秒,有时是 12 秒,它是随机的。这很奇怪。我指定上面的功能可以立即与按钮和其他功能一起使用。这是代码(我只写重要的东西):
class Horaire: ViewController, UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
self.present(vue, animated: true, completion: nil)
}
和另一类:
class Accueil: ViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad executed")
}
}
因此,当我单击 tableview 的一个单元格时,它会立即打印“viewDidLoad 已执行”,但 VC 切换仅在随机几秒钟后完成。为什么我有这种延迟以及如何解决它?它不使用 segue
解决方案
我想到的第一件事就是将块放在主队列中。我知道didSelectRowAt
应该在 UI 线程中运行,但我在互联网上看到了一些关于这件事的投诉。对我来说似乎是一个错误。
class Horaire: ViewController, UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
DispatchQueue.main.async{
let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
self.present(vue, animated: true, completion: nil)
}
}
}
你可以看到一些奇怪的原因,这似乎对这些人有用: https ://github.com/HeroTransitions/Hero/issues/79
推荐阅读
- tfs - 可以以编程方式创建 Team Foundation Server 项目吗?
- c++ - 从文件中读取,并在函数 C++ 中写入数组
- java - CDI @Produces 在字段上注释的目的是什么?
- visual-studio-code - 如何使用 vscode:// url 在wsl下的vscode中打开文件?
- python - Django Rest Framework PUT 视图显示已验证数据未填充
- spring - 我如何将 spring 本地化 messages.properties 捆绑到另一个 repo,然后通过 maven 依赖项使用?
- c# - HTTP 错误 500.19 - 内部服务器错误 - 无法访问请求的页面,因为该页面的相关配置数据无效
- networking - Hyper-V 服务器 2019 – Internet 不适用于来宾 VM
- ubuntu - objcopy 在 makefile 上失败,但在终端中手动输入没有问题
- javascript - Draft-js 不保存数据库