Ios Can';无法生成动态UITableView
我几乎是Swift编程新手。我使用的是Swift 3和最新版本的Xcode,我正在尝试做一些对大家来说可能非常简单的事情,所以这里是: 我正在尝试使用从Firebase DB检索的数据动态填充TableView。为此,我设计了一个原型单元,其中包含一个UIImageView、一些UILabel和一个步进器。我认为生成时不需要编辑Stepper和其中一个UILabel。但我需要放置一张图片和编辑2个标签。以下是我如何做到这一点的: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
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
的子类,并写下类的名称,例如:ProductsTableViewCell
ProductsTableViewCell
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桌面视图非常感谢,伙计!也要感谢你的朋友!它真的帮助了我!