你好,我实际上在我的应用程序中使用了tableview。我有这样的代码行,可以从VC切换到母亲,并且在任何地方都可以正常工作:
let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
self.present(vue, animated: true, completion: nil)
在我的tableView中,我使用功能DidSelectRowAt(当我单击行/单元格时执行)来执行此操作(切换VC) 但是,当我单击它时,您已经理解了,但是有延迟。 此延迟有时是1-2s,有时是12s,这是随机的。那真是怪了。 我通过按钮和其他按钮立即指定上面的功能。 这是代码(我只写重要的东西):
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
答案 0 :(得分:0)
我想到的第一件事是将代码块放入主队列。我知道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