【问题标题】:Passing data from a viewcontroller into tableviewCell将数据从视图控制器传递到 tableviewCell
【发布时间】:2017-11-30 07:53:23
【问题描述】:

我试图让 Json 数据显示在表格视图单元格中,但我没有显示任何价值。请让我知道我做错了什么。我的表视图正确链接到我的视图控制器(作为数据源和委托)。

注意:到目前为止,我还没有在任何地方调用 self.tableview.reloadData()。如果这是需要做的,请告诉我我必须在哪里调用它。我试过 viewdidload() 它没有用。

//json data 


if let mydata = data {
                            do{
                                let myJson = try JSONSerialization.jsonObject(with: mydata, options: .mutableContainers) as AnyObject
                             if   let articlesFromJson=myJson["account"] as! NSDictionary?{
  self.points = articlesFromJson["Points__c"] as! Double
  self.tier = articlesFromJson["Member_Tier__c"] as! String

//My destination VC is called HomeViewController
  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
               if segue.identifier == "HomeViewController" {
            if let destVc = segue.destination as? HomeViewController {
               destVc.pointrs = self.points
               destVc.tiers = self.tier
            }
        }

   }

//tableview 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MemberInfoTableViewCell
                cell.points.text = String(pointrs)
        cell.tier.text = tiers
               return cell
    }

更新:我刚刚重做了它,它可以工作。我一定错过了一些小东西!而且代码似乎是正确的。我还添加了一个导航控制器,因此 segue 代码发生了变化。有用。谢谢!

【问题讨论】:

  • 从哪里获得pointrs 值?
  • var pointrs: Double = 0.0 这只是一个字符串,它将保存从 mainVC @PraveenKumar 传递的 Json 值
  • 你确定从viewDidLoad的主线程调用reloadData了吗?
  • 是的,我做了@leandrodemarco,但没有什么不同。我的 prepareforsegue 方法正确吗?
  • 创建一个数据类来存储 json 值。在您想要的任何视图控制器上调用 api。创建一个单例来检索值。这是正确的做法。

标签: ios swift uitableview uiviewcontroller uistoryboardsegue


【解决方案1】:

1) 确保您的变量“pointrs”已初始化 2) 当你第一次进入表视图控制器时,你不需要调用 table.relaod() 3)确保你在下面的委托中传递了正确的计数

override func tableView(_ tableView: UITableView, numberOfRowsInSection      section: Int) -> Int {
    return fruits.count //Array Count
} 

【讨论】:

  • 我只有一行它返回 1。
  • 尝试在这里传递一个硬编码的字符串 cell.points.text = "some string"
  • 它有效。如果我的 tableviewcell 在 ViewController 上,它也可以工作。只有当它不同时才不会。
  • 您是否使用 .xib 作为单元格?
  • 我只使用 .swift
【解决方案2】:

试试这个,通过函数将值传递给您创建的“TableViewCellClass”,然后从那里设置标签的值...

【讨论】:

  • 试过了,没有来自 main Vc 的值被传递。我错过了什么?
【解决方案3】:

确保您确实将数据传递到您的表格视图控制器,因为您的表格视图控制器看起来不错。当你传递数据时,你的代码是

if segue.identifier == "HomeViewController" {
    if let destVc = segue.destination as? HomeViewController {
       destVc.pointrs = self.points
       destVc.tiers = self.tier
    }//Your code can ends up here
}//Your code can ends up here

从代码中查看我的 cmets。如果这些 if 语句中的任何一个是错误的,那么您就没有传递数据。所以首先在这里设置一个断点来判断你是否真的在传递数据。

如果您确实在传递数据,请在您的 cellForRow 方法中设置一个断点,以再次确保您的 pointrstiers 均有效且值正确

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多