From fb38143bf7202662f84a4183238f30a81ad395a5 Mon Sep 17 00:00:00 2001 From: Colin Reisterer Date: Fri, 8 Jul 2016 09:43:26 -0400 Subject: [PATCH 1/2] UITextField rText from .AllEditingEvents to catch autocorrect changes Note that this makes rText "chattier" and reports more than just changes. --- Sources/UIControl.swift | 7 ++++++- Sources/UITextField.swift | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Sources/UIControl.swift b/Sources/UIControl.swift index 38e86d2..9d9a7c4 100644 --- a/Sources/UIControl.swift +++ b/Sources/UIControl.swift @@ -47,6 +47,7 @@ import ReactiveKit control.addTarget(self, action: #selector(RKUIControlHelper.eventHandlerEditingChanged), forControlEvents: UIControlEvents.EditingChanged) control.addTarget(self, action: #selector(RKUIControlHelper.eventHandlerEditingDidEnd), forControlEvents: UIControlEvents.EditingDidEnd) control.addTarget(self, action: #selector(RKUIControlHelper.eventHandlerEditingDidEndOnExit), forControlEvents: UIControlEvents.EditingDidEndOnExit) + control.addTarget(self, action: #selector(RKUIControlHelper.eventHandlerAllEditingEvents), forControlEvents: UIControlEvents.AllEditingEvents) } func eventHandlerTouchDown() { @@ -104,7 +105,11 @@ import ReactiveKit func eventHandlerEditingDidEndOnExit() { pushStream.next(.EditingDidEndOnExit) } - + + func eventHandlerAllEditingEvents() { + pushStream.next(.AllEditingEvents) + } + deinit { control?.removeTarget(self, action: nil, forControlEvents: UIControlEvents.AllEvents) pushStream.completed() diff --git a/Sources/UITextField.swift b/Sources/UITextField.swift index de81eef..b199425 100644 --- a/Sources/UITextField.swift +++ b/Sources/UITextField.swift @@ -48,7 +48,7 @@ extension UITextField { }.disposeIn(rBag) self.rControlEvent - .filter { $0 == UIControlEvents.EditingChanged } + .filter { $0 == UIControlEvents.AllEditingEvents } .observeNext { [weak self] event in guard let unwrappedSelf = self else { return } updatingFromSelf = true @@ -76,7 +76,7 @@ extension UITextField { }.disposeIn(rBag) self.rControlEvent - .filter { $0 == UIControlEvents.EditingChanged } + .filter { $0 == UIControlEvents.AllEditingEvents } .observeNext { [weak self] event in guard let unwrappedSelf = self else { return } updatingFromSelf = true From d5be91e309984bb6b7d9e4fbab58bceb73261126 Mon Sep 17 00:00:00 2001 From: Colin Reisterer Date: Fri, 8 Jul 2016 10:26:01 -0400 Subject: [PATCH 2/2] Only send changed values to rText and rAttributedText --- Sources/UITextField.swift | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Sources/UITextField.swift b/Sources/UITextField.swift index b199425..7d381ab 100644 --- a/Sources/UITextField.swift +++ b/Sources/UITextField.swift @@ -51,9 +51,12 @@ extension UITextField { .filter { $0 == UIControlEvents.AllEditingEvents } .observeNext { [weak self] event in guard let unwrappedSelf = self else { return } - updatingFromSelf = true - unwrappedSelf.rText.value = unwrappedSelf.text - updatingFromSelf = false + // only send to rText if value changed, as .AllEditingEvents reports more than just changes + if unwrappedSelf.rText.value != unwrappedSelf.text { + updatingFromSelf = true + unwrappedSelf.rText.value = unwrappedSelf.text + updatingFromSelf = false + } }.disposeIn(rBag) return rText @@ -79,9 +82,12 @@ extension UITextField { .filter { $0 == UIControlEvents.AllEditingEvents } .observeNext { [weak self] event in guard let unwrappedSelf = self else { return } - updatingFromSelf = true - unwrappedSelf.rAttributedText.value = unwrappedSelf.attributedText - updatingFromSelf = false + // only sent to rAttributedText if value changed, as .AllEditingEvents reports more than just changes + if unwrappedSelf.rAttributedText.value != unwrappedSelf.attributedText { + updatingFromSelf = true + unwrappedSelf.rAttributedText.value = unwrappedSelf.attributedText + updatingFromSelf = false + } }.disposeIn(rBag) return rAttributedText