controlEvent
public func controlEvent(_ controlEvents: UIControl.Event) -> ControlEvent<()> {
let source: Observable<Void> = Observable.create { [weak control = self.base] observer in
MainScheduler.ensureRunningOnMainThread()
guard let control = control else {
observer.on(.completed)
return Disposables.create()
}
let controlTarget = ControlTarget(control: control, controlEvents: controlEvents) { _ in
observer.on(.next(()))
}
return Disposables.create(with: controlTarget.dispose)
}
.take(until: deallocated)
return ControlEvent(events: source)
}
- controlProperty와 달리 방출형식은 void로 고정
커스텀 구현
- Reactive extension
- controlEvent를 리턴하면 됨
extension Reactive where Base: UITextField {
var borderColor: Binder<UIColor?> {
return Binder(self.base) { textField, color in
textField.layer.borderColor = color?.cgColor
}
}
var editingDidBegin: ControlEvent<Void> {
return controlEvent(.editingDidBegin)
}
var editingDidEnd: ControlEvent<Void> {
return controlEvent(.editingDidEnd)
}
}
inputField.rx.editingDidBegin
.map { UIColor.red }
.bind(to: inputField.rx.borderColor)
.disposed(by: bag)
inputField.rx.editingDidEnd
.map { UIColor.gray }
.bind(to: inputField.rx.borderColor)
.disposed(by: bag)