单击表格单元格时,将变量值发送到下一个视图控制器
我有两个表视图控制器
-
InvoiceList
视图控制器 -
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开始(看一下截图)
然后使用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 } } }
而已!