簡體   English   中英

Segue滯后,Swift中的表視圖

[英]Segue lag, tableview in Swift

我正在Swift 3中的第一個應用程序中工作。我正在使用tableView(由“擴展MainController:UITableViewDataSource”提供)。 從這個tableView中,通過情節提要,我有兩個選擇。 一個用於編輯(通過單擊附件圖標),另一個用於更詳細的屏幕(通過單擊表格行)。 我不是通過代碼來稱呼這個故事,而是通過情節提要。

我的問題是有時會有很大的滯后。 就像單擊一行后一樣,30秒后將顯示下一個屏幕。 但是現在總是。 有時其立即起作用。 有趣的是,當我觸摸第1行時,什么也沒有發生,接下來我單擊第2行,然后出現第1行。

我也在使用委托,這是准備任務的代碼:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // 1
    if segue.identifier == "AddSensor" {
        // 2
        let navigationController = segue.destination
            as! UINavigationController
        // 3
        let controller = navigationController.topViewController
            as! AddController
        // 4
        controller.delegate = self
    }
    else if segue.identifier == "EditSensor" {
        let navigationController = segue.destination
            as! UINavigationController
        let controller = navigationController.topViewController
            as! AddController
        controller.delegate = self
        if let indexPath = tableView.indexPath(
            for: sender as! UITableViewCell) {
            controller.sensorToEdit = sensors[indexPath.row]
        }
    }
    else if segue.identifier == "DetailSeq" {
        let navigationController = segue.destination
            as! UINavigationController
        let controller = navigationController.topViewController
            as! DetailController
        controller.delegate = self
        if let indexPath = tableView.indexPath(
            for: sender as! UITableViewCell) {
            controller.sensorRecieved = sensors[indexPath.row]
        }
    }

}

我讀到它是iOS8中的常見錯誤,可以通過添加來解決

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {  
DispatchQueue.main.async {
    self.performSegue(withIdentifier: "DetailSeq",sender: self)
}
}  

但這對我沒有用。 我不知道下一步該怎么解決。 誰能指導我?

根據這個SO問題 ,如果以代碼顯示視圖控制器而不是使用故事板上的segue,則您可能能夠修復您的錯誤。 這樣的事情,目的地是您要去的VC。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: 
    NSIndexPath) {

    DispatchQueue.main.async {
        self.presentViewController(destination, animated: true) { () -> Void                    
              in

        }
    }
}

您必須像這樣使用:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    DispatchQueue.main.async {
        self.performSegue(withIdentifier: "DetailSeq",sender: self)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM