无法生成动态UITableView

时间:2017-05-27 15:52:01

标签: ios swift firebase

我在Swift编程方面几乎是新手。我正在使用Swift 3和Xcode的最新版本,我正在尝试做一些对你们所有人来说都很容易的事情,所以在这里:

我正在尝试使用从Firebase数据库中检索到的数据动态填充TableView。为此,我设计了一个Prototype单元,它包含一个UIImageView,一些UILabel和一个Stepper。我认为在生成时不需要编辑Stepper和其中一个UILabel。但我需要放置一张图片并编辑2个UILabels。这是我试图这样做的方式:

hash = Hash.new(0)
p hash["pikachu"]
#=> 0

当我运行应用程序时,这是我发现的错误:

  

无法将'UITableViewCellContentView'(0x10442bff8)类型的值转换为'UIImageView'(0x10441c738)。

但是有一些不错的东西,我知道从Firebase中正确地检索数据,导致它在生成TableView单元格之前打印在控制台上。

先谢谢你,伙计们!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

以下是:

  1. 创建UITableViewCell子类 点击文件--->新---> Cocoa Touch --->然后选择UITableViewCell的子类并记下该类的名称,例如:ProductsTableViewCell

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

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

  4. 现在在cellForRowAt函数中调用此原型单元格的IBOutlets并更改其内容。 示例代码:

    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
    }