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

Send variable value to next view controller when click a table cell

我有两个 table 视图控制器

  1. InvoiceList 视图控制器
  2. 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
}