/// - parameter controlEvents: Filter for observed event types.
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)
}
.takeUntil(deallocated)
return ControlEvent(events: source)
}
해당 컨트롤 이벤트가 발생할때마다 next 이벤트 방출 → Void
extension Reactive where Base : UITextField{
var editingDidBegin : ControlEvent<Void>{
return controlEvent(.editingDidBegin)
}
var editingDidEnd : ControlEvent<Void>{
return controlEvent(.editingDidEnd)
}
var borderColor : Binder<UIColor?>{
return Binder(self.base) { base, color in
base.layer.borderColor = color?.cgColor
}
}
}