有没有办法将 preferredStatusBarStyle 与 RxCocoa 绑定?
Is there a way yo bind preferredStatusBarStyle with RxCocoa?
我正在使用以下代码绑定 statusBarStyle
。
public extension Reactive where Base: UIApplication {
public var statusBarStyle: Binder<UIStatusBarStyle> {
return Binder(self.base) { view, attr in
view.statusBarStyle = attr
}
}
}
然而 属性 已弃用 iOS 9. 新文档建议在视图控制器中覆盖 preferredStatusBarStyle
。我该如何绑定这个 属性?
你不能"bind"到preferredStatusBarStyle
,因为它是生成的属性。正如您所说,您必须覆盖此 属性 和 return 值。一种方法可能是创建一个 BehaviorRelay
属性,改为绑定到它,然后 return 来自重写方法的中继值。您还需要确保在状态栏样式更改时通知视图控制器:
let statusBarStyleRelay = BehaviorRelay<UIStatusBarStyle>(value: .default)
override var preferredStatusBarStyle: UIStatusBarStyle {
return statusBarStyleRelay.value
}
func setupBindings(for statusBarObservable: Observable<UIStatusBarStyle>) {
statusBarObservable
.bind(to: statusBarStyleRelay)
.disposed(by: disposeBag)
statusBarStyleRelay
.distinctUntilChanged()
.do(onNext: { [weak self] _ in
self?.setNeedsStatusBarAppearanceUpdate()
})
.subscribe()
.disposed(by: disposeBag)
}
我正在使用以下代码绑定 statusBarStyle
。
public extension Reactive where Base: UIApplication {
public var statusBarStyle: Binder<UIStatusBarStyle> {
return Binder(self.base) { view, attr in
view.statusBarStyle = attr
}
}
}
然而 属性 已弃用 iOS 9. 新文档建议在视图控制器中覆盖 preferredStatusBarStyle
。我该如何绑定这个 属性?
你不能"bind"到preferredStatusBarStyle
,因为它是生成的属性。正如您所说,您必须覆盖此 属性 和 return 值。一种方法可能是创建一个 BehaviorRelay
属性,改为绑定到它,然后 return 来自重写方法的中继值。您还需要确保在状态栏样式更改时通知视图控制器:
let statusBarStyleRelay = BehaviorRelay<UIStatusBarStyle>(value: .default)
override var preferredStatusBarStyle: UIStatusBarStyle {
return statusBarStyleRelay.value
}
func setupBindings(for statusBarObservable: Observable<UIStatusBarStyle>) {
statusBarObservable
.bind(to: statusBarStyleRelay)
.disposed(by: disposeBag)
statusBarStyleRelay
.distinctUntilChanged()
.do(onNext: { [weak self] _ in
self?.setNeedsStatusBarAppearanceUpdate()
})
.subscribe()
.disposed(by: disposeBag)
}