如何将didSelectRowAtIndexPath发送回swift中的控制器

时间:2014-10-08 16:13:25

标签: swift tableview

我在swift中有1个viewController和1个tableViewController。我可以从viewController发送一个NSMutableArray来使用segue填充tableViewController。我不知道如何将选定的行发送回视图控制器。到目前为止的代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    println("You selected cell #\(indexPath.row)!")

    // Missing code for sending back the selected row

    self.dismissViewControllerAnimated(true, completion: nil)
}

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用委派模式。创建协议:

protocol MyDataDelegate {
    didSelectRow(row: NSIndexPath, data: MyData)
}

在表格控制器中,添加一个属性:

var myDataDelegate: MyDataDelegate?

并在didSelectRowAtIndexPath中调用委托方法:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    println("You selected cell #\(indexPath.row)!")

    let data = getDataForRow(indexPath) // <== You need to implement it
    self.myDataDelegate?.didSelectRow(indexPath, data: data)

    self.dismissViewControllerAnimated(true, completion: nil)
}

接下来,在主视图控制器中:

  • 实施MyDataDelegate协议
  • 实现MyDataDelegate.didSelectRow方法
  • 在呈现表控制器之前(或者在创建它之后,如果你手动执行它),将表控制器的myDataDelegate属性设置为self

这样,当在表控制器中选择一行时,在主视图控制器上调用didSelectRow方法,因此您可以使用索引路径和/或数据执行任何操作。

当然可以随意更改didSelectRow签名(使用索引路径,行索引,有或没有数据等)。