为啥 UITableViewCell textLabel 属性是可选的?
Posted
技术标签:
【中文标题】为啥 UITableViewCell textLabel 属性是可选的?【英文标题】:Why is a UITableViewCell textLabel property optional?为什么 UITableViewCell textLabel 属性是可选的? 【发布时间】:2015-07-20 22:34:03 【问题描述】:一个UITableViewCell
的detailTextLabel
should 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 宽度小于 UITableView 宽度