TableView DidSelectRowAt()延迟

时间:2019-01-04 02:06:13

标签: uitableview swift4.2

你好,我实际上在我的应用程序中使用了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

1 个答案:

答案 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