1

我如何才能didSet识别何时imageView.image已设置?它似乎只在初始化期间被调用。

@IBOutlet weak var imageView: UIImageView! {
   didSet {
      //do stuff
   }
}
4

1 回答 1

2

didSet只会在您设置imageView自身时调用。例如:

imageView = UIImageView()

这实际上没有任何意义,因为您已经有一个图像视图并且它工作得很好。您要做的是监视图像视图属性之一的变化。

为此,请尝试创建 的子类UIImageView,然后观察其image. 不要忘记在情节提要中设置图像视图的自定义类,然后重新连接插座。

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

于 2021-08-23T18:58:22.557 回答