【问题标题】:Send information to another View controller将信息发送到另一个视图控制器
【发布时间】:2017-07-14 00:41:00
【问题描述】:

我无法获取表格视图单元格的索引路径并将其发送到下一页。

var bookName: String?

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath) as! ProfileTableViewCell

    print(posts[indexPath.row])
    let post = self.posts[indexPath.row] as! [String: AnyObject]
    self.bookName = post["title"] as? String
}

override public func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == "sendMessageToUser", let chatVc = segue.destination as? SendMessageViewController else {
        return
    }
    chatVc.bookName = self.bookName
}

所以我试图捕获我单击的任何单元格的标题并将其发送到 SendMessageViewController。问题是它准确地捕获了一些标题,有时它不能准确地捕获标题,我不知道为什么。

【问题讨论】:

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


    【解决方案1】:

    您需要实现表格视图委托方法tableView(_:didSelectRowAt:)。在该方法中,将选定的 indexPath 保存到实例变量并调用您的 segue。

    然后在 prepareForSegue 中,使用保存的 indexPath 索引到您的数据模型并获取所选单元格的数据。 (在您的情况下为标题字符串。)不要从单元格的视图中获取数据。视图不是用来存储数据的。

    【讨论】:

      【解决方案2】:

      cellForRowAt 方法用于创建视图,在本例中为表视图单元格,然后将其提供给表视图以显示。当表格视图加载数据时,您会看到 10 个单元格。所以这个函数被调用 10 次来准备 10 个单元格。所以在最后一次,索引行将是 9,而您的 bookName 属性将是您的 post 数组的第 10 个。

      现在假设您向下滚动一点,然后一直向上滚动,最后准备好的单元格是第一个单元格。所以现在你的bookName 将是你的帖子数组的第一个。这就是为什么您的书名不正确。

      要解决您的问题,您只需要在用户单击单元格后获取特定的书名。所以删除在你的cellForRow方法中为bookName赋值的代码,然后像这样添加另一个委托函数

      override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
          let post = self.posts[indexPath.row] as! [String: AnyObject]
           self.bookName = post["title"] as? String
      }
      

      【讨论】:

      • 当我这样做并单击单元格时,它崩溃并说致命错误:在展开可选值时意外发现 nil
      • @juelizabeth 您的表格视图是否基于此 posts 数组填充?
      • OP 询问的是表视图,而不是 UIPickerView 对象。一般概念是相似的,但使用选择器视图来解释表视图问题的答案似乎很奇怪。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多