0
Comment naviguer dans les champs de texte avec les boutons de clavier suivants/terminés, en utilisant uniquement RxSwift + RxCocoa?Comment naviguer dans UITextFields (Boutons Suivant/Terminé) avec Rx
Comment naviguer dans les champs de texte avec les boutons de clavier suivants/terminés, en utilisant uniquement RxSwift + RxCocoa?Comment naviguer dans UITextFields (Boutons Suivant/Terminé) avec Rx
Avec une extension UITextField simple, vous pouvez observer les événements de contrôle du champ de texte et agir en conséquence.
Extension:
import UIKit
import RxSwift
import RxCocoa
extension UITextField {
func resignWhenFinished(_ disposeBag: DisposeBag) {
setNextResponder(nil, disposeBag: disposeBag)
}
func setNextResponder(_ nextResponder: UIResponder?, disposeBag: DisposeBag) {
// Set the return key type to:
// - next: When there is a next responder
// - done: When there is no next responder (simply resign)
returnKeyType = (nextResponder != nil) ? .next : .done
// Subscribe on editing end on exit control event
rx.controlEvent(.editingDidEndOnExit)
.subscribe(onNext: { [weak self, weak nextResponder] in
if let nextResponder = nextResponder {
// Switch to next responder if available
nextResponder.becomeFirstResponder()
} else {
// Otherwise simply resign
self?.resignFirstResponder()
}
})
.addDisposableTo(disposeBag)
}
}
Utilisation:
@IBOutlet private weak var firstTextField: UITextField!
@IBOutlet private weak var secondTextField: UITextField!
@IBOutlet private weak var lastTextField: UITextField!
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
firstTextField.setNextResponder(secondTextField, disposeBag: disposeBag)
secondTextField.setNextResponder(lastTextField, disposeBag: disposeBag)
lastTextField.resignWhenFinished(disposeBag)
}