Skip to content

Commit ac15640

Browse files
committed
Adds missing UITextView extensions.
1 parent bdbcb5b commit ac15640

File tree

2 files changed

+122
-2
lines changed

2 files changed

+122
-2
lines changed

RxCocoa/iOS/UITextView+Rx.swift

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,47 @@ extension UITextView : RxTextInput {
6363

6464
return ControlProperty(values: source, valueSink: bindingObserver)
6565
}
66-
66+
67+
/**
68+
Reactive wrapper for `delegate` message.
69+
*/
70+
public var rx_didBeginEditing: ControlEvent<()> {
71+
return ControlEvent<()>(events: self.rx_delegate.observe(#selector(UITextViewDelegate.textViewDidBeginEditing(_:)))
72+
.map { a in
73+
return ()
74+
})
75+
}
76+
77+
/**
78+
Reactive wrapper for `delegate` message.
79+
*/
80+
public var rx_didEndEditing: ControlEvent<()> {
81+
return ControlEvent<()>(events: self.rx_delegate.observe(#selector(UITextViewDelegate.textViewDidEndEditing(_:)))
82+
.map { a in
83+
return ()
84+
})
85+
}
86+
87+
/**
88+
Reactive wrapper for `delegate` message.
89+
*/
90+
public var rx_didChange: ControlEvent<()> {
91+
return ControlEvent<()>(events: self.rx_delegate.observe(#selector(UITextViewDelegate.textViewDidChange(_:)))
92+
.map { a in
93+
return ()
94+
})
95+
}
96+
97+
/**
98+
Reactive wrapper for `delegate` message.
99+
*/
100+
public var rx_didChangeSelection: ControlEvent<()> {
101+
return ControlEvent<()>(events: self.rx_delegate.observe(#selector(UITextViewDelegate.textViewDidChangeSelection(_:)))
102+
.map { a in
103+
return ()
104+
})
105+
}
106+
67107
}
68108

69109
#endif

Tests/RxCocoaTests/UITextView+RxTests.swift

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,86 @@ class UITextViewTests : RxTest {
2828
textView.rx_text.on(.Next("Text2"))
2929
XCTAssertTrue(textView.set)
3030
}
31+
32+
func testDidBeginEditing() {
33+
var completed = false
34+
var value: ()?
35+
36+
autoreleasepool {
37+
let textView = UITextView(frame: CGRectMake(0, 0, 1, 1))
38+
39+
_ = textView.rx_didBeginEditing.subscribe(onNext: { n in
40+
value = n
41+
}, onCompleted: {
42+
completed = true
43+
})
44+
45+
textView.delegate!.textViewDidBeginEditing!(textView)
46+
}
47+
48+
XCTAssertNotNil(value)
49+
XCTAssertTrue(completed)
50+
}
51+
52+
func testDidEndEditing() {
53+
var completed = false
54+
var value: ()?
55+
56+
autoreleasepool {
57+
let textView = UITextView(frame: CGRectMake(0, 0, 1, 1))
58+
59+
_ = textView.rx_didEndEditing.subscribe(onNext: { n in
60+
value = n
61+
}, onCompleted: {
62+
completed = true
63+
})
64+
65+
textView.delegate!.textViewDidEndEditing!(textView)
66+
}
67+
68+
XCTAssertNotNil(value)
69+
XCTAssertTrue(completed)
70+
}
71+
72+
func testDidChange() {
73+
var completed = false
74+
var value: ()?
75+
76+
autoreleasepool {
77+
let textView = UITextView(frame: CGRectMake(0, 0, 1, 1))
78+
79+
_ = textView.rx_didChange.subscribe(onNext: { n in
80+
value = n
81+
}, onCompleted: {
82+
completed = true
83+
})
84+
85+
textView.delegate!.textViewDidChange!(textView)
86+
}
87+
88+
XCTAssertNotNil(value)
89+
XCTAssertTrue(completed)
90+
}
91+
92+
func testDidChangeSelection() {
93+
var completed = false
94+
var value: ()?
95+
96+
autoreleasepool {
97+
let textView = UITextView(frame: CGRectMake(0, 0, 1, 1))
98+
99+
_ = textView.rx_didChangeSelection.subscribe(onNext: { n in
100+
value = n
101+
}, onCompleted: {
102+
completed = true
103+
})
104+
105+
textView.delegate!.textViewDidChangeSelection!(textView)
106+
}
107+
108+
XCTAssertNotNil(value)
109+
XCTAssertTrue(completed)
110+
}
31111
}
32112

33113
class UITextViewSubclass2 : UITextView {
@@ -42,4 +122,4 @@ class UITextViewSubclass2 : UITextView {
42122
super.text = newValue
43123
}
44124
}
45-
}
125+
}

0 commit comments

Comments
 (0)