2017-04-11 91 views
3

我想展示B UIView iff A UIView可見。我在Objective-C中使用了ReactiveCocoa 2,並試圖找到類似的方式來觀察 UIView的屬性ReactiveSwift。我仍然在努力學習框架及其用法,但無法提出一個好的解決方案。如果有人能給我一個建議,我會很感激。ReactiveSwift:如何觀察UIView isHidden?

回答

4

下面是來自ReactiveSwift readme的志願例如:

// A producer that sends the current value of `keyPath`, followed by 
// subsequent changes. 
// 
// Terminate the KVO observation if the lifetime of `self` ends. 
let producer = object.reactive.values(forKeyPath: #keyPath(key)) 
    .take(during: self.reactive.lifetime) 

所以你的情況,你可以做這樣的事情(實際上還沒有嘗試過這種代碼,但它應該傳達的想法):

viewA.reactive.values(forKeyPath: #keyPath(isHidden)) 
    .take(during: self.reactive.lifetime) 
    .startWithValues { hidden in viewB.isHidden = hidden } 

UPDATE:

我只注意到ReactiveCocoa includes a binding target for UIView`s isHidden property,所以你其實可以簡化上述代碼:

viewB.reactive.isHidden <~ viewA.reactive.values(forKeyPath: #keyPath(isHidden)) 

注意,take(during:)不再需要使用<~時,作爲自動<~栓處置綁定源與所述結合靶的壽命。