UITableView,registerClass和detailTextLabel - 奇怪的行为

时间:2014-11-10 13:59:40

标签: ios iphone uitableview swift

最近我注意到以下行为,我无法理解为什么它会按原样运作。

我的故事板上有一个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"

行,因为detailTextLabelnil

然后我决定删除registerClass函数调用并注意到代码不再崩溃,但dequeueReusableCellWithIdentifier函数调用每次都返回nil。我认为我不能以某种方式启用"字幕"故事板中表格视图的单元格样式,但我在Interface Builder中看不到这样的选项。

我做错了什么?我该如何解决?

提前致谢。

1 个答案:

答案 0 :(得分:1)

在你的故事板中,你在tableView中有原型单元吗?如果没有,请从对象库(右下角)拖动表格视图单元格并将其嵌入表格视图中。然后,您可以使用该单元的属性检查器来设置reuseIdentifier。如果单元格样式默认为" Custom",请将其修改为"字幕" - 然后IB会自动为textLabeldetailTextLabel添加标签(并将它们连接到UITableViewCell中的插座)。见下文:

enter image description here