gpt4 book ai didi

ios - 在 tableView 中使用多个自定义 UITableViewCell(_cellForRowAt :)

转载 作者:搜寻专家 更新时间:2023-11-01 06:16:51 24 4
gpt4 key购买 nike

我有一些自定义的 UITableViewCell,并且会随机使用其中的一些。但是在我注册它们之后,它会在 tableView(_cellForRowAt:) 中崩溃。这是我的代码: 在 viewDidLoad 方法中

    tableView.register(CustomACell.self, forCellReuseIdentifier: "Identifier")
tableView.register(CustomACell.self, forCellReuseIdentifier: "Identifier")

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let model = dataSource[indexPath.row]
if let type = model.type {
switch type {
case .A:
let cell = tableView.dequeueReusableCell(withIdentifier: MyIdentifier) as! CustomACell
cell.assgin(message: model)
return cell

case .B:
let cell = tableView.dequeueReusableCell(withIdentifier: MyIdentifier) as! CustomBCell
cell.assgin(message: model)
return cell
}
}
let cell = tableView.dequeueReusableCell(withIdentifier: MyIdentifier) as! CustomACell
cell.assgin(message: model)
return cell
}

如果我同时注册两者,它会在 case.A 处崩溃。如果我不这样做,其中一些会在 tableView.dequeueReusableCell 处崩溃。这是控制台错误信息之一:

无法将“TM.CustomACell”类型的值 (0x10bb40940) 转换为“TM.CustomBCell”(0x10bb40578)。

最佳答案

更改 CellReuseIdentifiers。您对两个自定义单元格使用相同的方法。对不同的单元格使用不同的标识符。

enter image description here

var nibName = UINib(nibName: "Identifier1", bundle: nil)
self.tableView.register(nibName, forCellReuseIdentifier: "Identifier")

nibName = UINib(nibName: "Identifier2", bundle: nil)
self.tableView.register(nibName, forCellReuseIdentifier: "Identifier2")

然后改变cellForRowAt,尝试下面的代码

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let model = dataSource[indexPath.row]
if let type = model.type {
switch type {
case .A:
let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier1") as! CustomACell
cell.assgin(message: model)
return cell

case .B:
let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier2") as! CustomBCell
cell.assgin(message: model)
return cell
default :
let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier1") as! CustomACell
cell.assgin(message: model)
return cell
}
}

}

关于ios - 在 tableView 中使用多个自定义 UITableViewCell(_cellForRowAt :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42852802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com