【问题标题】:Swift: How to pass data from TableViewController to Details VCSwift:如何将数据从 TableViewController 传递到 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 是的,但只显示“标题”。而已。我该如何改进?

标签: ios swift uitableview firebase firebase-realtime-database


【解决方案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()

}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2016-02-26
    相关资源
    最近更新 更多