swift - didSet 未在 UIImageView 上调用
swift - didSet not called on UIImageView
如何让 didSet
识别何时设置了 imageView.image
?好像只在初始化的时候调用。
@IBOutlet weak var imageView: UIImageView! {
didSet {
//do stuff
}
}
didSet
只会在您设置 imageView
本身时调用。例如:
imageView = UIImageView()
这实际上没有意义,因为您已经有了一个图像视图并且它工作得很好。您要做的是监视图像视图属性之一的变化。
为此,请尝试制作 UIImageView
的子 class,然后观察其 image
的变化。不要忘记在情节提要中重新设置图像视图的自定义 class,然后重新连接插座。
class CustomImageView: UIImageView {
override var image {
didSet {
/// do stuff
}
}
}
如果您需要在视图控制器中执行一些代码,请尝试使用闭包。
class CustomImageView: UIImageView {
var imageSet: (() -> Void)?
override var image {
didSet {
imageSet?()
}
}
}
class ViewController: UIViewController {
@IBOutlet weak var imageView: CustomImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView.imageSet = {
/// do stuff
}
}
}
或者,您可以使用 KVO。
如何让 didSet
识别何时设置了 imageView.image
?好像只在初始化的时候调用。
@IBOutlet weak var imageView: UIImageView! {
didSet {
//do stuff
}
}
didSet
只会在您设置 imageView
本身时调用。例如:
imageView = UIImageView()
这实际上没有意义,因为您已经有了一个图像视图并且它工作得很好。您要做的是监视图像视图属性之一的变化。
为此,请尝试制作 UIImageView
的子 class,然后观察其 image
的变化。不要忘记在情节提要中重新设置图像视图的自定义 class,然后重新连接插座。
class CustomImageView: UIImageView {
override var image {
didSet {
/// do stuff
}
}
}
如果您需要在视图控制器中执行一些代码,请尝试使用闭包。
class CustomImageView: UIImageView {
var imageSet: (() -> Void)?
override var image {
didSet {
imageSet?()
}
}
}
class ViewController: UIViewController {
@IBOutlet weak var imageView: CustomImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView.imageSet = {
/// do stuff
}
}
}
或者,您可以使用 KVO。