是否可以将自定义UITableViewCell存储到Array中?

时间:2018-10-05 13:23:48

标签: swift uitableview cell subclass

我有很多自定义单元格,并且想要通过使用结构来简化cellForRowAt并将有关该单元格的信息存储在数组中。

struct HowToCells {
    let helpCell: UITableViewCell
    let identifier: String
    let icon: UIImage
    let cellName: String
}

var cellArray = [HowToCells]()

cellArray.append(HowToCells.init(helpCell: ScreenRecordingTableViewCell(), identifier: "ScreenRecordingTableViewCell", icon: HowToImage.screenRecording.image(), cellName: "Enable screen recording"))

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

     let c = cellArray[indexPath.row]
     let cellToUse = c.helpCell

     let cell = tableView.dequeueReusableCell(withIdentifier: c.identifier, for: indexPath) as! cellToUse

}

我收到以下错误:使用未声明的类型'cellToUse'

ScreenRecordingTableViewCell是自定义的UITableViewCell

2 个答案:

答案 0 :(得分:0)

您在此行得到错误:  让cell = tableView.dequeueReusableCell(withIdentifier:c.identifier,for:indexPath)为! cellToUse

因为应该在as!之后使用UITableViewCell子类类型,而不是变量名。 x as! y要求将对象X的类型转换强制为类型Y。

话虽如此,您将遇到将单元格存储在数组中以及使用tableView.dequeueReusableCell的问题,后者会使用一个现有单元格,将其出队,然后再使用。这将损坏您的数据。您需要将所有单元格数据放入数组中,然后从cellForRow中的数组中检索该索引。

答案 1 :(得分:0)

您不需要将表视图单元格存储在数组中,因为UITableView会自己创建和存储它们。只需使用tslint中的tableView.dequeueReusableCell(withIdentifier:for:)方法即可获取所需的单元格。之后,您可以配置此单元格。

tableView(_:cellForRowAt:)