UITableViewCell子类IBOutlets返回nil
我已经从故事板中创建了一个UITableViewCell子类,并将子视图连接为IBOutlets,如下所示:
public class WaitingStatusTableViewCell: UITableViewCell {
@IBOutlet weak var leftBoxView: UIView!
@IBOutlet weak var leftTimeLabel: UILabel!
@IBOutlet weak var leftTitleLabel: UILabel!
重写初始者:
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.initialConfigure()
}
required public init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialConfigure()
}
在initialConfigure函数上,我尝试配置我的子视图的一些属性
func initialConfigure() {
self.leftBoxView.backgroundColor = UIColor.clearColor()
self.leftBoxView.layer.shadowColor = UIColor.darkGrayColor().CGColor
self.leftBoxView.layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 12.0).CGPath
self.leftBoxView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
self.leftBoxView.layer.shadowOpacity = 1.0
self.leftBoxView.layer.shadowRadius = 2
self.leftBoxView.layer.masksToBounds = true
self.leftBoxView.clipsToBounds = false
}
它根本不起作用,我收到以下错误:
致命错误:在解包可选值时意外发现nil
有任何想法吗?
哦,顺便说一下,它在drawsRect函数上工作,但我真的想了解“为什么”
这一切都归结为执行的顺序:
以下是加载视图时按顺序发生的关键时刻:
init()
并创建该类的一个实例。 目前所有的IBOutlets都是nil
。 这就是你得到这个错误的原因。 awakeFromNib()
,此时,只要已通过故事板正确链接,IBOutlet将不再具有nil
值。 drawRect()
因此,解决方案是将self.initialConfigure()
移动到awakeFromNib
方法中:
override func awakeFromNib() {
super.awakeFromNib()
self.initialConfigure()
}
并相信iOS会发挥它的魔力。
如果您想了解有关该主题的更多信息,这里有一篇很好的文章,详细介绍创建视图时发生的事件序列。
链接地址: http://www.djcxy.com/p/87743.html