在 iOS 的系統中,要輸入中文看似簡單,但實際上都需要許多英文單字或是拆解而組成,舉例來說,如果你要打手機,可能會打「ㄕㄡㄐㄧ」,而在打字的途中,其實就算是文字的變化了,所以如果 UITextField 有數字限制,就變得很難控了。幸好 RxSwift 是一個很方便的好物,接下來我們來看如何利用 RxSwift + UITextField 來實現吧!

如果使用 RxSwift,我們一樣可以去監聽。舉例來說,我們可以自訂一個 RxTextField 的元件。
public class RxTextField: UITextField {
private(set) var m_TextChangeRelay = BehaviorRelay<String>(value: "")
public override func awakeFromNib() {
super.awakeFromNib()
rx.controlEvent([.editingChanged])
.asObservable()
.subscribe(onNext: { [weak self] _ in
self?.textChanged()
})
.disposed(by: disposeBag)
}
}
接下來,用 「markedTextRange」來判斷是不是已經輸入完成而且選完詞了,如果「markedTextRange」為空,表示已經選完了,其它函式就可以用訂閱的方式就可以取到值啦,是不是超方便的?
private func textChanged(){
if markedTextRange != nil {
return
}
let newText = text
if newText?.count ?? 0 > max_count {
text = newText?[0..<max_count]
}
m_TextChangeRelay.accept(text ?? "")
}