单击 table 单元格时将变量值发送到下一个视图控制器
Send variable value to next view controller when click a table cell
我有两个 table 视图控制器
InvoiceList
视图控制器
InvoiceShow
视图控制器
我使用下面的 didSelectRowAtIndexPath
方法来选择 table 单元格特定值
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let rowObject = objects[indexPath.row]
let invoicehash = rowObject["hash_key"]!
}
单击 InvoiceList
的 table 单元格时,我需要将 invoicehash
值发送到 InvoiceShow
控制器
我尝试使用 prepareForSegue
功能。但它不适用,因为它会在 didSelectRawAtIndexPath
函数之前触发。所以当我实现它时,给出了之前的点击事件变量值。一个不正确。
请帮助我从 InvoiceShow
控制器
访问 invoiceHash
变量值
如果您希望 and/or 已经在故事板上设置,您仍然可以使用 segue。
您只需要将 Interface Builder 中的两个视图控制器直接从一个连接到另一个。
因此,从控制器本身而不是从 TableViewCell 开始按住 ctrl 并拖动(查看屏幕截图)
然后将 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
}
}
}
就是这样!
您将在 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
}
我有两个 table 视图控制器
InvoiceList
视图控制器InvoiceShow
视图控制器
我使用下面的 didSelectRowAtIndexPath
方法来选择 table 单元格特定值
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let rowObject = objects[indexPath.row]
let invoicehash = rowObject["hash_key"]!
}
单击 InvoiceList
invoicehash
值发送到 InvoiceShow
控制器
我尝试使用 prepareForSegue
功能。但它不适用,因为它会在 didSelectRawAtIndexPath
函数之前触发。所以当我实现它时,给出了之前的点击事件变量值。一个不正确。
请帮助我从 InvoiceShow
控制器
invoiceHash
变量值
如果您希望 and/or 已经在故事板上设置,您仍然可以使用 segue。 您只需要将 Interface Builder 中的两个视图控制器直接从一个连接到另一个。 因此,从控制器本身而不是从 TableViewCell 开始按住 ctrl 并拖动(查看屏幕截图)
然后将 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
}
}
}
就是这样!
您将在 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
}