Swift:如何将数据从 TableViewController 传递到 Details VC

Posted

技术标签:

【中文标题】Swift:如何将数据从 TableViewController 传递到 Details VC【英文标题】:Swift: How to pass data from TableViewController to Details VC 【发布时间】:2016-10-25 10:10:09 【问题描述】:

我有一个表视图控制器,其中包含来自 Firebase 数据库的 3 个变量。 我想将此数据传递给详细信息视图控制器。 目前,我只有“title”(label1) 从 TableVC 传递到 Details VC。

如何将其余数据(label2 和 label3)传递给 DetailsVC?

MondayTableVC:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell_Monday")

        let messageSnapshot: FIRDataSnapshot! = conf[indexPath.row]
        let message = messageSnapshot.value as! Dictionary<String, String>

        // print(message)

        let label1 = cell?.viewWithTag(1) as! UILabel
        label1.text = message["title"]

        let label2 = cell?.viewWithTag(2) as! UILabel
        label2.text = message["place"]

        let label3 = cell?.viewWithTag(3) as! UILabel
        label3.text = message["date"]


        return cell!

    

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 



        let messageSnapshot: FIRDataSnapshot! = conf[indexPath.row]
        let message = messageSnapshot.value as! Dictionary<String, String>

        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let monDetails = storyBoard.instantiateViewControllerWithIdentifier("mondayDetails") as! MondayViewController
        monDetails.title = message["title"]


        monDetails.mondayDetailDict = message
        self.navigationController?.pushViewController(monDetails, animated: true)


    

星期一(详细信息)ViewController:

class MondayViewController: UIViewController 

    var mondayDetailDict: Dictionary<String, String> = Dictionary()


    @IBOutlet weak var label1: UILabel!


    override func viewDidLoad() 
        super.viewDidLoad()


    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()

    


   

有人可以帮助解决这个挑战吗?

【问题讨论】:

使用 UILabel 插座创建您自己的单元格子类,并将数据放入单元格中。 为什么不将整个message 发送到MondayViewController @Adeel 我该怎么做? @gryzek 实际上,您已经在monDetails.conferenceDetailDict = message 这一行中发送了整个message 字典。 @Adeel 是的,但只显示“标题”。而已。我该如何改进? 【参考方案1】:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

        let messageSnapshot: FIRDataSnapshot! = conf[indexPath.row]
        let message = messageSnapshot.value as! Dictionary<String, String>

        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let monDetails = storyBoard.instantiateViewControllerWithIdentifier("mondayDetails") as! MondayViewController
        monDetails.title = message["title"]
        let cell = tableView.cellForRow(at: indexPath) as! CellClass

        let label2 = cell?.viewWithTag(2) as! UILabel
        monDetails.field2 = label2.text

        let label3 = cell?.viewWithTag(3) as! UILabel
        monDetails.field3 = label3.text

        monDetails.conferenceDetailDict = message
        self.navigationController?.pushViewController(monDetails, animated: true)


    

【讨论】:

它不起作用。 “细胞?”在 Xcode 8 中定义不好。该代码无法正确实现。【参考方案2】:

您实际上并没有将值分配给label1。将MondayViewController 更改为:

class MondayViewController: UIViewController 

var mondayDetailDict: Dictionary<String, String> = Dictionary()

@IBOutlet weak var label1: UILabel!

override func viewDidLoad() 
    super.viewDidLoad()
    label1.text = mondayDetailDict["place"]


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()



【讨论】:

以上是关于Swift:如何将数据从 TableViewController 传递到 Details VC的主要内容,如果未能解决你的问题,请参考以下文章

如何将 json 数据从 alamofire 转换为 swift 对象

Swift:如何将数据从 TableViewController 传递到 Details VC

如何使用通知将字符串数据从 swift 传递到目标 c 类

如何将数据从应用程序显示到Today Extension Swift

如何将验证错误从 php 返回到 swift 或 segue 成功

如何将数据从 Playground 页面传递到 Swift Playgrounds 中的另一个 Playground 页面?