Ios Can';无法生成动态UITableView

Ios Can';无法生成动态UITableView,ios,swift,firebase,Ios,Swift,Firebase,我几乎是Swift编程新手。我使用的是Swift 3和最新版本的Xcode,我正在尝试做一些对大家来说可能非常简单的事情,所以这里是: 我正在尝试使用从Firebase DB检索的数据动态填充TableView。为此,我设计了一个原型单元,其中包含一个UIImageView、一些UILabel和一个步进器。我认为生成时不需要编辑Stepper和其中一个UILabel。但我需要放置一张图片和编辑2个标签。以下是我如何做到这一点的: override func tableView(_ tableVi

我几乎是Swift编程新手。我使用的是Swift 3和最新版本的Xcode,我正在尝试做一些对大家来说可能非常简单的事情,所以这里是:

我正在尝试使用从Firebase DB检索的数据动态填充TableView。为此,我设计了一个原型单元,其中包含一个UIImageView、一些UILabel和一个步进器。我认为生成时不需要编辑Stepper和其中一个UILabel。但我需要放置一张图片和编辑2个标签。以下是我如何做到这一点的:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //Set cell contents
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId)

    let imageView = cell?.viewWithTag(0) as! UIImageView
    var price:UILabel = cell?.viewWithTag(2) as! UILabel
    var name:UILabel = cell?.viewWithTag(1) as! UILabel
    let amount = cell?.viewWithTag(3) as! UILabel
    name.text = productList[indexPath.row].name
    price.text = "" + (productList[indexPath.row].price?.description)! 
    let imageDict:NSDictionary = productList[indexPath.row].imageName!

    let image = downloadImageProductFromFirebase(append: imageDict["hash"] as! String)
    imageView.image = image


    return cell!
}
运行应用程序时,我发现以下错误:

无法将“UITableViewCellContentView”(0x10442bff8)类型的值强制转换为“UIImageView”(0x10441c738)

但有一点很好,我知道数据是从Firebase中正确检索的,因为在生成TableView单元格之前,数据是通过控制台打印的


提前谢谢你们,伙计们

tableview单元格的内容视图似乎已经有了标记0。您可以为图像视图提供另一个标记号,甚至更好:创建一个自定义子类并将@IBOutlets连接到单元格。这使得它的输入更加安全,甚至在访问视图时也能自动完成。

我的朋友创建了一个
UITabelViewCell
子类,并连接
UIImageView
UILabel
的IBOutlets,然后在
cellForRowAt
中调用它们。这是正确的做法

以下是如何:

  • 创建UITableViewCell子类 单击File-->New-->Cocoa Touch-->,然后选择
    UITableViewCell
    的子类,并写下类的名称,例如:
    ProductsTableViewCell

  • 单击故事板中的动态单元原型,然后单击自定义类中的标识检查器将类名更改为
    ProductsTableViewCell

  • 在单元格中添加UIImageView和UILabel,然后在ProductsTableViewCell.swift文件中为其创建IBoutlet。我们在第一步中创建的子类

  • 现在,在您的
    cellForRowAt
    函数中,调用此原型单元格的IBOutlet并更改其内容。 示例代码:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId) as! ProductsTableViewCell
    
    cell.imageView.image = downloadImageProductFromFirebase(append: imageDict["hash"] as! String)
    cell.nameLabel.text = productList[indexPath.row].name
    cell.priceLabel.text = "" + (productList[indexPath.row].price?.description)!
    
    return cell
    }
    

  • 让imageView=cell?.viewWithTag(0)为!UIImageView
    正在查找单元格的contentView,因为
    0
    是视图的默认标记值。为您的
    UIImageView
    使用另一个标记值。太棒了!作为瓦卡瓦玛,你第一次尝试就解决了!现在我遇到了另一个问题(如果我太烦人,请原谅):错误移动到我试图修改的第一个UILabel:无法将类型为“UITableViewCell”(0x109cb1778)的值强制转换为“UILabel”(0x109cad268)。还有其他帮助吗?不要使用标签。创建自定义UITableViewCell子类,将其分配给tableview,创建一组@IBOutlets并将标签连接到它们。然后将cellForRowAt中的单元格强制转换为自定义单元格类,并直接访问视图。好的!似乎很容易做到!我可以按照任何教程来做吗?=)真的谢谢你,伙计!raywenderlich桌面视图非常感谢,伙计!也要感谢你的朋友!它真的帮助了我!