我有很多自定义单元格,并且想要通过使用结构来简化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
答案 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:)