最近我注意到以下行为,我无法理解为什么它会按原样运作。
我的故事板上有一个UITableView
,视图控制器中有以下代码:
override func viewDidLoad() {
super.viewDidLoad()
self.threadsTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell? = self.threadsTableView.dequeueReusableCellWithIdentifier("cell") as? UITableViewCell
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
}
cell!.detailTextLabel!.text = "str"
}
在这种情况下,应用程序崩溃
cell!.detailTextLabel!.text = "str"
行,因为detailTextLabel
是nil
然后我决定删除registerClass
函数调用并注意到代码不再崩溃,但dequeueReusableCellWithIdentifier
函数调用每次都返回nil。我认为我不能以某种方式启用"字幕"故事板中表格视图的单元格样式,但我在Interface Builder中看不到这样的选项。
我做错了什么?我该如何解决?
提前致谢。
答案 0 :(得分:1)
在你的故事板中,你在tableView中有原型单元吗?如果没有,请从对象库(右下角)拖动表格视图单元格并将其嵌入表格视图中。然后,您可以使用该单元的属性检查器来设置reuseIdentifier。如果单元格样式默认为" Custom",请将其修改为"字幕" - 然后IB会自动为textLabel
和detailTextLabel
添加标签(并将它们连接到UITableViewCell中的插座)。见下文: