如何在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,或行指数,有无数据等)

+1

非常感谢。代码工作得很好 – 2014-10-08 18:29:47