diff --git a/RxCocoa/iOS/UIControl+Rx.swift b/RxCocoa/iOS/UIControl+Rx.swift index 5ecccfc6..92299e30 100644 --- a/RxCocoa/iOS/UIControl+Rx.swift +++ b/RxCocoa/iOS/UIControl+Rx.swift @@ -25,6 +25,15 @@ extension UIControl { }.asObserver() } + /** + Bindable sink for `selected` property. + */ + public var rx_selected: AnyObserver { + return UIBindingObserver(UIElement: self) { control, selected in + control.selected = selected + }.asObserver() + } + /** Reactive wrapper for target action pattern. diff --git a/Tests/RxCocoaTests/Control+RxTests+UIKit.swift b/Tests/RxCocoaTests/Control+RxTests+UIKit.swift index 03a53ba4..f604df86 100644 --- a/Tests/RxCocoaTests/Control+RxTests+UIKit.swift +++ b/Tests/RxCocoaTests/Control+RxTests+UIKit.swift @@ -27,6 +27,22 @@ extension ControlTests { XCTAssert(subject.enabled == false, "Expected enabled set to false") } + + func testSubscribedSelectedToTrue() { + let subject = UIControl() + let disposable = Observable.just(true).subscribe(subject.rx_selected) + defer { disposable.dispose() } + + XCTAssert(subject.selected == true, "Expected selected set to true") + } + + func testSubscribeSelectedToFalse() { + let subject = UIControl() + let disposable = Observable.just(false).subscribe(subject.rx_selected) + defer { disposable.dispose() } + + XCTAssert(subject.selected == false, "Expected selected set to false") + } } // UITextField