将数据从tableviewcontroller发送到detailviewcontroller

我有一个名为DetailTableViewController的tableviewcontroller,我需要将数据传递给名为DetailTableViewController的下一个tableviewcontroller。 但是当用户点击DetailTableViewController的单元格时,我需要传递数据。 然后,我得到错误为“意外地发现零,而解包可选值”。请帮我理清Swift 3。

首先在详细视图控制器中创build一个variables,以保存从第一个视图控制器发送的值。 然后在第一个视图控制器中的didSelectRowAt方法内分配值,然后以编程方式导航。 这样,你就不需要为执行prepare for segue方法来prepare for segue发送数据。

你只需要实现didselectrowat方法。

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let selected = firstArray[indexPath.row] let detailvc = self.storyboard?.instantiateViewController(withIdentifier: "DetailTableViewController") as! DetailTableViewController detailvc.type = selected self.present(detailvc, animated: true, completion: nil) } 

我从头创build了一个video教程。 如何将数据从一个表视图控制器传递给另一个 。 希望这会对你有所帮助。

  • 首先, 从来没有从视图(单元格)中获取数据,在这种情况下,始终从模型(数据源数组)获取它。

  • 其次, prepare(for segue的签名prepare(for segue对于Swift 3来说prepare(for segue是错误的。

didSelectRowAt传递indexPath而不是self ,也可以删除valueToPass

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { performSegue(withIdentifier: "Cell", sender: indexPath) } 

prepareForSegue从模型中获取数据并将其传递给详细视图控制器:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "Cell" { let viewController = segue.destination as! GuidesDetailsTableViewController let indexPath = sender as! IndexPath viewController.passedValue = guides[indexPath.row] } } 

在你的didSelectRow里面你正在设置一个新的indexPath 。 删除它应该做的伎俩。

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // Don't reassign indexPath // let indexPath = tableView.indexPathForSelectedRow! let currentCell = tableView.cellForRow(at: indexPath)! as UITableViewCell valueToPass = currentCell.textLabel?.text performSegue(withIdentifier: "Cell", sender: self) } 

当你调用performSegue的时候,var的值似乎并没有值。 尝试用下面的代码来分配valueToPass的值:

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { valueToPass = guides[indexPath.row] performSegue(withIdentifier: "Cell", sender: self) } 

并从你的viewController创build你的segue,也许你从cell创buildsegue。

在这里输入图像说明