单击表格单元格时,将变量值发送到下一个视图控制器

我有两个表视图控制器

  1. InvoiceList视图控制器
  2. InvoiceShow视图控制器

我使用didSelectRowAtIndexPath方法来获取选定的表格单元didSelectRowAtIndexPath定值

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let rowObject = objects[indexPath.row] let invoicehash = rowObject["hash_key"]! } 

我需要在单击InvoiceList的表格单元格时将invoicehash值发送到InvoiceShow控制器

我试着使用prepareForSegue函数。 但它不适用,因为它将在didSelectRawAtIndexPath函数之前触发。 所以当我实现它时,给出前一个click事件变量值。 不正确的。

请帮我从InvoiceShow控制器访问invoiceHash变量值

您将在prepareForSegue方法本身中获取所选单元格。

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let selectedIndexPath = self.tableView.indexPathForSelectedRow()! let rowObject = objects[selectedIndexPath.row] let invoiceHash = rowObject["hash_key"]! let invoiceShowViewController = segue.destinationViewController as! InvoiceShowViewController // Set invoiceHash to `InvoiceShowViewController ` here invoiceShowViewController.invoiceHash = invoiceHash } 

如果您想要和/或已经在故事板上设置,您仍然可以使用segue。 您只需将Interface Builder中的两个视图控制器直接从一个连接到另一个。 所以,从控制器本身开始ctrl-dragging而不是从TableViewCell开始(看一下截图)

按住Ctrl键并从ViewController拖动到ViewController

然后使用performSegueMethod和新的segue标识符,如下所示:

 self.performSegueWithIdentifier("mySegueIdentifier", sender: self) 

最后,您的prepareForSegue方法:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "mySegueIdentifier" { let selectedIndex = self.invoiceTableView.indexPathForSelectedRow //if element exist if selectedIndex?.row < myDataSourceArray.count { let destination = segue.destinationViewController as! InvoiceShowViewController let invoice = myDataSourceArray[selectedIndex!.row] destination.invoice = invoice } } } 

而已!