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

时间:2015-11-11 19:59:57

标签: ios swift uitableview global-variables didselectrowatindexpath

我有两个表视图控制器

  1. InvoiceList查看控制器
  2. InvoiceShow查看控制器
  3. 我使用didSelectRowAtIndexPath方法来获取选定的表格单元格特定值

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

    点击invoicehash的表格单元格后,我需要向InvoiceShow控制器发送InvoiceList

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

    请帮助我从invoiceHash控制器

    访问InvoiceShow变量值

2 个答案:

答案 0 :(得分:2)

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

Ctrl-drag from ViewController to 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
        }
    }
}

那就是它!

答案 1 :(得分:2)

您将在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
}