我有一个UITableViewController和一个UIViewController。在我的UITableViewController中,有一个didSelectRowAt方法:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

self.performSegue(withIdentifier: "PDFIdentifier", sender: nil)

}

运行此代码的:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let viewController = storyboard?.instantiateViewController(withIdentifier: "PDFFile") as! PDFFileController

        viewController.data = self.file

        viewController.fileName = self.fileName

    }

这会在模式上显示UIViewController PDFFileController,当我在当前方法viewController.data中放置断点时,viewController.fileName将被填充。当它通过PDFFileController时,这些值是空的。为什么他们是空的,我做错了什么?

最佳答案

你不需要一段话,只需要呈现

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

   let viewController = storyboard?.instantiateViewController(withIdentifier: "PDFFile") as! PDFFileController

   viewController.data = self.file

   viewController.fileName = self.fileName

   self.present(viewController,animated:true)
}

或者如果您想保留segue模态属性
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let viewController = segue.destination as! PDFFileController

    viewController.data = self.file

    viewController.fileName = self.fileName

}

不要在prepareForSegue中实例化一个vc,因为它将是一个动态的新实例,而真正的目标vc将无法获取它的数据
ios - Swift 4从UITableView执行Segue并传递数据-LMLPHP

10-08 15:39