Swift UITableViewCell子类返回nil
我已从storyboard中设置了一个UITableViewCell子类,并将子视图连接为IBOutlets,您可以在此处查看:Swift UITableViewCell子类返回nil,swift,uitableview,Swift,Uitableview,我已从storyboard中设置了一个UITableViewCell子类,并将子视图连接为IBOutlets,您可以在此处查看: public class WaitingStatusTableViewCell: UITableViewCell { @IBOutlet weak var leftBoxView: UIView! @IBOutlet weak var leftTimeLabel: UILabel! @IBOutlet weak var leftTitleLabel: UILabel
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函数上工作,但我真的想了解“为什么”这一切都归结到执行顺序: 以下是加载视图时按顺序出现的关键时刻:
- 在表视图子类上调用
,并创建该类的实例。此时,所有IBO出口均为init()
。这就是为什么你会犯这个错误nil
- 场景的其他子视图将被初始化,iBouts将被链接并指定值,您的实例将添加到视图层次中
- 然后调用
,此时您的IBOutlets将不再具有awakeFromNib()
值,只要它们已通过故事板正确链接nil
- 当视图准备好绘制到屏幕时,最后调用
drawRect()
self.initialConfigure()
移动到awakeFromNib
方法中:
override func awakeFromNib() {
super.awakeFromNib()
self.initialConfigure()
}
相信iOS会发挥它的魔力
,如果您想了解更多有关此主题的信息。哦,谢谢!成功了!顺便问一下,调用super.awakeFromNib()不是一个很好的做法吗?是的,绝对是。参考资料:很好。我编辑了我的答案。