繁体   English   中英

通过点击TableView单元格将数据传递到详细信息视图

[英]Pass Data to Detail View by Tapping TableView Cell

我正在尝试在tableview和它的详细视图之间进行通信

请您检查一下我的方式并给我一些建议

因此,我将Navigation Controller嵌入到Table视图中

而且我没有使用tableview(_:didSelectedRowAt)方法。

Stackoverflow中的一些答案,他们说重写了prepare(:)方法,并在tableview(_:didSelectedRowAt)编写了performSegue(withIdentifier:)方法

但是,如果我写上面两个屏幕所示的代码。

(我认为是因为segue动作被触发了两次)

我只是将segue动作(推)从表视图单元格(“朋友姓名”单元格)拖放到“详细信息视图”

通过使用此segue动作,我可以通过prepare(:segue)方法传递数据,以在“详细信息视图”中编辑选定的朋友名称。

如果我从详细信息视图的文本字段中编辑朋友姓名,则有一个edit按钮可以触发展开搜索

所以我在Detail View Controller中覆盖了prepare(:segue)方法

并在Table View的ViewController下方编写了代码

@IBAction func getEditedNameFromDetailView(_ sender:UIStoryboardSegue){
    if sender.source is DetailViewController {
        if let senderVC = sender.source as? DetailViewController {
            data[(self.someTableView.indexPathForSelectedRow?.row)!] = senderVC.editedData!
        }
        someTableView.reloadData()
    }
}

这是传达表格视图及其详细信息视图的正确方法吗?

根据您的描述,您可能有2个segue。 一个在StoryBoard中,另一个在您的代码中。

prepare方法未执行segue。 它只是为您提供了执行与segue相关的操作的机会,例如将数据传递到目标控制器。 如果您已经在StoryBoard中创建了一个,则不要调用Perform segue,反之亦然。

prepare的常见用法如下所示:

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        //get the destination controller and cast it to your detail class
        if let destinationController  = segue.destination as? YourDetailClassHere {
           //set the properties you want
            destinationController.someProperty = someValue
        }
    }

几点笔记-

  • 您可以使用sender对象传递来自perform调用的数据。
  • 一个常见的错误是假设目标控制器始终是您的详细信息控制器。 它可以是导航控制器,然后您必须从导航控制器中提取详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM