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
如何将数据从应用程序显示到Today Extension Swift
如何将验证错误从 php 返回到 swift 或 segue 成功
如何将数据从 Playground 页面传递到 Swift Playgrounds 中的另一个 Playground 页面?