无法将“UITableViewCell”(0x11e159aa0)类型的值转换为“test.CourseItemTableViewCell”
Posted
技术标签:
【中文标题】无法将“UITableViewCell”(0x11e159aa0)类型的值转换为“test.CourseItemTableViewCell”【英文标题】:Could not cast value of type 'UITableViewCell' (0x11e159aa0) to 'test.CourseItemTableViewCell' 【发布时间】:2020-09-01 14:57:32 【问题描述】:我有一个带有表格视图单元格的表格视图。我正在尝试实现具有多种单元格类型的表格视图。当我这样做时,我收到以下错误
if (indexPath.section == 0)
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CourseItemTableViewCell
cell.refreshUI()
cell.cellIndex = indexPath
cell.dataSource = self
cell.delegate = self
cell.backgroundColor = UIColor.clear
cell.collectionView.reloadData()
return cell;
else
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! BookItemTableViewCell
cell.refreshUI()
cell.cellIndex = indexPath
cell.dataSource = self
cell.delegate = self
cell.backgroundColor = UIColor.clear
cell.collectionView.reloadData()
return cell;
如何在表格视图中实现多种单元格类型?我希望一行具有一种单元格类型,而另一行具有另一种单元格类型。
【问题讨论】:
带有标识符单元格的表格视图单元格只能/应该是一种类型,您应该使用 bookCell 和 courseCell 标识符来区分它们 您的故事板中有两种单元格类型的示例吗? 这能回答你的问题吗? Could not cast value of type 'UITableViewCell' to '(AppName).(CustomCellName)' 【参考方案1】:可能是您没有注册两个单元格。这是我必须向您展示的内容:
我有一个UITableView
,它可以动态显示三种类型的单元格中的任何一种...NSNumber
、CIColor
和(未在此代码中显示)NSVector
。根据自定义单元格,您有成对的标签和滑块 - 分别为 1、3 和 2。
将此限制为NSNumber
(一个滑块)和CIColor
(三个滑块),以及正常工作的子类UITableCells
,我需要做的就是渲染这两个:
在viewDidLoad
中正确注册两种 单元格类型。请注意,这是我认为您缺少的:
tblAttributes.register(NSNumberCell.self, forCellReuseIdentifier: NSNumberCell.identifier)
tblAttributes.register(CIColorCell.self, forCellReuseIdentifier: CIColorCell.identifier)
通过代码检测您要在tableView(cellForRowAt:)
中呈现哪种单元格类型。请注意,我的代码应该从不返回UITableViewCell
:
switch attributes[indexPath.row].attributeClass
case "NSNumber":
let cell = tableView.dequeueReusableCell(withIdentifier: NSNumberCell.identifier) as! NSNumberCell
// [populate label and slider defaults here]
return cell
case "CIColor":
let cell = tableView.dequeueReusableCell(withIdentifier: CIColorCell.identifier) as! CIColorCell
// [populate label and slider defaults here]
return cell
default:
// this should never happen
return UITableViewCell()
总而言之,CourseItemTableViewCell
和 BookItemTableViewCell
似乎不是唯一标识的。
以下是我对单元格进行子分类的方式:
class NSNumberCell:UITableViewCell
static let identifier = String(describing: NSNumberCell.self)
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
// [custom code here]
其他自定义单元格也是如此。
【讨论】:
以上是关于无法将“UITableViewCell”(0x11e159aa0)类型的值转换为“test.CourseItemTableViewCell”的主要内容,如果未能解决你的问题,请参考以下文章
详解UDS CAN诊断:ECUReset Service(SID:0X11)
无法将 AutoLayout 约束添加到 UITableViewCell 中的元素
无法将“UITableViewCell”类型的值转换为“AppName.CustomCellName”
(iOS + Firebase)无法将图像从 UITableViewCell 传递给下一个 ViewController