3

即使当我选择适当的视图时我的属性在 IB 的属性检查器中是可见的,但该属性的didSet方法不会更新相关的子视图。

这是我的财产:

@IBInspectable var imageRepresentation: UIImage = UIImage() {
    didSet {
        let image = imageRepresentation
        let hv = self.headerImageView
        let bv = self.backgroundImageView

        self.headerImageView.image = imageRepresentation
        self.backgroundImageView.image = imageRepresentation
    }
}

如您所见,我希望将两个UIImageView更新为新图像。但是,当我使用Editor>Debug Selected Views并设置断点时,我的每个视图都是零。

我很想听听任何人的想法。

谢谢

4

2 回答 2

1

似乎所有 IBOutlet 在一段时间之前都不会在 IBDesignable 视图中初始化。但是 IB 将访问这些 IBOutlet,因为您需要设置/获取它们的一些属性。一种方法是让所有这些都是可选的,比如

self.headerImageView?.image = imageRepresentation

然后,当您确定 IBDesignable 视图将显示在屏幕上时(这意味着所有子视图都已初始化),再次手动设置该属性。

另一种方法是从代码创建 IBDesignable 视图的所有子视图。通过这种方式,您不需要任何 IBOutlet,一切都应该随时存在。

于 2015-05-03T09:47:16.980 回答
0

不要在@IBInspectabletry 上创建一个属性观察者,而是在@IBOutlet. 请参阅机器人娜塔莎的这篇文章。例如:

@IBInspectable var buttonTitle: String = ""
@IBOutlet weak var titleLabel: UILabel! {
    didSet {
        titleLabel.text = buttonTitle
    }
}
于 2018-12-18T08:13:05.447 回答