【问题标题】:How do I populate a tableView with comments simply?如何简单地用评论填充 tableView?
【发布时间】:2019-06-20 06:14:38
【问题描述】:

我正在使用来自 Firebase 的每个帖子的 cmets 数据为我的帖子添加评论部分。我一直在阅读 Firebase 的教程、StackOverflow 上的问题答案和 Youtube 教程,但我仍然遇到问题。我正在使用 FirebaseUI 开源工具包。这是我用于 Firebase 的 JSON:

 "posts" : {
    "-LhjroYuwrmhENr78QEQ" : {
      "comments" : {
        "-LhjrqSlNDl49q-f2IvJ" : "How is it going there?",
        "-Lhjry5Q02nk3UDuwl1V" : "I would like some help with Firebase Apps",
        "-LhjrzadaywBb2p2S63D" : "Do you think you can help me?"
      },
      "reports" : 0,
      "text" : "Ryan Here",
      "timestamp" : 1560950032828,
      "title" : "Hey",
      "userID" : "nyRBXSyyDhc1Qkypou0Iz0iMsyr1"
    },
    "comments" : {
      "-LhjrqSlNDl49q-f2IvK" : {
        "reports" : 0,
        "timestamp" : 1560950040707,
        "userID" : "nyRBXSyyDhc1Qkypou0Iz0iMsyr1"
      },
      "-Lhjry5Rr-DVxGdwgAhn" : {
        "reports" : 0,
        "timestamp" : 1560950071986,
        "userID" : "nyRBXSyyDhc1Qkypou0Iz0iMsyr1"
      },
      "-LhjrzadaywBb2p2S63E" : {
        "reports" : 0,
        "timestamp" : 1560950078142,
        "userID" : "nyRBXSyyDhc1Qkypou0Iz0iMsyr1"
      }
    }
  }
}

我想填充我的 tableView,“cmetsTable”,每个评论作为一个唯一的单元格,带有一个填充评论文本的标签。我在情节提要中制作了一个带有标签的原型单元格,然后尝试使用以下代码发布文本:

var post: Post?


override func viewDidLoad() {
    super.viewDidLoad()
    print(delegate!)
    ref.child("posts").child("comments").observeSingleEvent(of: .value, with: {DataSnapshot in self.commentsTable})
    newCommentLabel.delegate = self
    let firebaseRef = Database.database().reference().child("posts").child("comments")

    let query = firebaseRef.queryOrderedByKey() /*or a more sophisticated query of your choice*/

    let dataSource = self.commentsTable.bind(to: query, populateCell: { (tableView: UITableView, indexPath: IndexPath, snapshot: DataSnapshot) -> UITableViewCell in

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        let value = snapshot.value as! NSDictionary

        self.query?.observe(.value, with: { snapshot in
        })

        cell.textLabel?.text = firebaseRef.text

        return cell
    })
}

目前,“let dataSource = ...”行出现错误,显示“'UITableView 类型的值?”没有成员'绑定'”。我不确定如何解决此错误。我的文字似乎与 Firebase 文档相同。

我也不确定如何在 tableView 中显示所需的信息。到目前为止,这是我尝试过的:

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->   UITableViewCell {
    let cell = UITableViewCell()
    let label = UILabel(frame: CGRect(x:0, y:0, width:200, height:50))
    cell.addSubview(label)
    return cell
}



func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 50
}

private func setMain() {
    guard let post = self.post else {
        return
    }

我发现很难满足展示 cmets 的所有必要条件。在没有足够解释的情况下,教程和文档似乎有点含糊或难以理解。我希望这里有人可以帮助我简化流程。感谢您的帮助!

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    我相信你想先下载所有的 cmets。将 cmets 存储在数组或字典中。这是您的数据源。您绝对不想在 ViewDidLoad 中创建 uitableview 单元格。

    然后,当您调用 cellForRowAtIndexPath 时,使用您的 cmets 数据源(数组/字典)填充您创建的自定义单元格字段。

    numberOfRowsInSection 应该是您的数据源的大小/计数。

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多