【问题标题】:How to send didSelectRowAtIndexPath back to view controller in swift如何将 didSelectRowAtIndexPath 快速发送回视图控制器
【发布时间】:2026-02-11 10:45:02
【问题描述】:

我有 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)
}

有什么想法吗?

【问题讨论】:

    标签: swift tableview


    【解决方案1】:

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

    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签名(使用索引路径,或行索引,有或没有数据等)

    【讨论】:

    • 只需在 (var myDataDelegate: MyDataDelegate?) 前面加上 weak 来避免“强引用循环”的风险:)
    最近更新 更多