Простой пример КВО для наблюдения скрытых:
class SDKViewController : UIViewController {
private var context = 0
private var observingView: UIView?
func initialize(view: UIView) {
removeObservations()
observingView = view
// start observing changes to hidden property of UIView
observingView?.addObserver(self, forKeyPath: "hidden", options: [.New], context: &context)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if let newValue = change?[NSKeyValueChangeNewKey] as? Bool where context == &self.context {
print("hidden changed: \(newValue)")
}
}
// this is called by deinit
// it should also be called if they can deregister the view from your SDK
func removeObservations() {
if let view = observingView {
view.removeObserver(self, forKeyPath: "hidden")
observingView = nil
}
}
deinit {
removeObservations()
}
}
Это делает некоторые предположения о конфигурации, но если вы позволяете инициализацию многих взглядов, вы можете легко настроить.
Кроме того, многое из этого более красноречиво, если вы используете KVOController Facebook, который не находится в Swift.
Редактировать: Просто отметить, спрятать Работает с KVO.
Edit # 2: Обновленный YourSDKClass в SDKViewController (NSObject -> UIViewController)
'hidden'? дайте более подробную информацию, покажите код – Wain
Вы имеете в виду, когда свойство в классе «А» меняет значение, что-то происходит в классе «В»? –
@Peter M - Точно. –