为啥 UITableViewCell textLabel 属性是可选的?

Posted

技术标签:

【中文标题】为啥 UITableViewCell textLabel 属性是可选的?【英文标题】:Why is a UITableViewCell textLabel property optional?为什么 UITableViewCell textLabel 属性是可选的? 【发布时间】:2015-07-20 22:34:03 【问题描述】:

一个UITableViewCelldetailTextLabelshould be optional,也就是documented,但为什么textLabel属性是可选的?

【问题讨论】:

【参考方案1】:

简答:节省资源。 textLabel 属性是可选的,以允许延迟初始化 UILabel。换句话说,除非您实际尝试访问该属性,否则该属性将保持为零。

您可以在调试器中通过检查您的 UITableViewCell 的实例来验证这一点:

let cell = dequeueReusableCellWithIdentifier(MyCell.cellIdentifier, forIndexPath: indexPath) as! MyCell

// check cell.textLabel here in the debugger. should be nil.

cell.textLabel.text = "test"   // creates textLabel via lazy initialization 

【讨论】:

【参考方案2】:

虽然没有正确记录,但它遵循相同的规则 - 必须设置正确的样式。也就是说,如果您使用自定义单元格 - 通常通过界面构建​​器配置,自定义单元格会被初始化 - 在这种情况下,不会将任何默认视图添加到单元格中,因为这会很浪费。

如果您使用自定义单元格以外的任何其他样式,它将始终初始化第一个标签,因此您可以放心使用它(但在这种情况下显然无法更改定义,因此它始终被声明为可选)。

【讨论】:

以上是关于为啥 UITableViewCell textLabel 属性是可选的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 systemLayoutSizeFittingSize 为 UITableViewCell 返回 (0, 0)?

为啥我的 UITableViewCell 的方向会改变 AutoLayout?

为啥我的自定义 UITableViewCell 没有显示?

为啥 UITableViewCell 宽度小于 UITableView 宽度

为啥手动重用的 UITableViewCell 在重新加载行时会消失?

如果我快速点击,为啥 UITableViewCell 选择不绘制?