如何在swift中将didSelectRowAtIndexPath发送回视图控制器
问题描述:
我在swift中有1个viewController和1个tableViewController。我可以从viewController发送一个NSMutableArray来使用segue填充tableViewController。我不知道如何将选定的行发送回视图控制器。到目前为止的代码:如何在swift中将didSelectRowAtIndexPath发送回视图控制器
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)
}
任何想法?
答
您可以使用委派模式。创建一个协议:
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
属性来自
这样,当你的表格控制器中选择一行时,在你的主视图控制器上调用didSelectRow
方法,所以你可以根据索引路径和/或数据做任何你需要的操作。
当然随意改变didSelectRow
签名(使用indexpath,或行指数,有无数据等)
非常感谢。代码工作得很好 – 2014-10-08 18:29:47