TableView DidSelectRowAt() 延迟
TableView DidSelectRowAt() latency
您好,我实际上在我的应用程序中使用了 tableview。我有从 VC 切换到 mother 的这行代码,它在任何地方都可以正常工作:
let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
self.present(vue, animated: true, completion: nil)
在我的 tableView 中,我使用函数 DidSelectRowAt(当我点击 row/cell 时执行)来执行此操作(切换 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 :
class Accueil: ViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad executed")
}
}
所以当我点击我的表格视图的一个单元格时,它会立即打印 "viewDidLoad executed" 但 VC 切换仅在随机的几秒钟后完成。
为什么我有这种延迟以及如何解决它?它不使用 segue
我第一个想到的就是把block放到主队列中。我知道 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
您好,我实际上在我的应用程序中使用了 tableview。我有从 VC 切换到 mother 的这行代码,它在任何地方都可以正常工作:
let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
self.present(vue, animated: true, completion: nil)
在我的 tableView 中,我使用函数 DidSelectRowAt(当我点击 row/cell 时执行)来执行此操作(切换 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 :
class Accueil: ViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad executed")
}
}
所以当我点击我的表格视图的一个单元格时,它会立即打印 "viewDidLoad executed" 但 VC 切换仅在随机的几秒钟后完成。 为什么我有这种延迟以及如何解决它?它不使用 segue
我第一个想到的就是把block放到主队列中。我知道 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