gpt4 book ai didi

swift - UITableViewCell 子类 IBOutlets 返回 nil

转载 作者:可可西里 更新时间:2023-11-01 00:16:23 25 4
gpt4 key购买 nike

我已经从 Storyboard中设置了一个 UITableViewCell 子类,并将 subview 连接为 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 函数上,我尝试配置我的 subview 的一些属性

    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
}

它根本不起作用,我收到以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

有什么想法吗?

哦,顺便说一下,它适用于 drawsRect 函数,但我真的很想了解“为什么”

最佳答案

这一切都归结为执行顺序:

以下是加载 View 时依次发生的关键时刻:

  • init() 在您的 TableView 子类上调用,并创建该类的一个实例。此时所有 IBOutlets 都是 nil。这就是您收到此错误的原因。
  • 场景的其他 subview 已初始化,IBOutlet 已链接并分配值,您的实例已添加到 View 层次结构中。
  • 然后调用
  • awakeFromNib(),此时您的 IBOutlets 将不再具有 nil 值,只要它们已通过 Storyboard正确链接。<
  • drawRect() 最后调用,当 View 准备好绘制到屏幕上时

因此,解决方案是将 self.initialConfigure() 移动到 awakeFromNib 方法中:

override func awakeFromNib() {
super.awakeFromNib()
self.initialConfigure()
}

相信 iOS 会发挥它的魔力。

Here is an excellent article detailing the sequence of events that occur when a view is created ,如果您想了解有关该主题的更多信息。

关于swift - UITableViewCell 子类 IBOutlets 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31052574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com