我正在尝试以编程方式使用自定义单元类创建tableViewController,但是我收到此错误:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法使用标识符cellId对单元格进行出列 - 必须为标识符注册一个nib或类或在故事板中连接原型单元格' ***首先抛出调用堆栈:
我的应用程序中有几个UItableViews与自定义单元格,它们都工作正常,但由于某种原因,这一个不起作用。我花了最后几个小时试图解决这个问题,但看不出问题,有人可以帮帮我吗?
这是我的tableview类:
class cameraInfoCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
self.textLabel?.frame.origin.x = 20
self.detailTextLabel?.frame.origin.x = 20
self.detailTextLabel?.textColor = UIColor(red:0.73, green:0.73, blue:0.73, alpha:1.0)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
这是我的自定义单元类:
{{1}}
答案 0 :(得分:5)
您使用两个不同的cellID:
在您的课程中,您定义了一个cellId变量
let cellId = "cellId"
您在cellForRowAt
中使用的:
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! cameraInfoCell
在addTableView
中,您使用硬编码字符串" MyCell":
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
要解决此问题,请在两个位置使用cellId,因此请将addTableView
方法中的代码更改为:
tableView.register(cameraInfoCell.self, forCellReuseIdentifier: cellId)
答案 1 :(得分:1)
您必须在viewDidLoad
tableView.register(cellClassName.self, forCellReuseIdentifier: "cellId")