Swift 4从UITableView执行Segue并传递数据

时间:2018-10-16 13:49:57

标签: ios swift

我有1个UITableViewController和1个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时,这些值为空。为什么它们是空的,我在做什么错了?

1 个答案:

答案 0 :(得分:2)

您无需进行任何操作即可呈现

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不会获取它的数据

enter image description here