iOS/RxSwift
[RxSwift] UITextFiled의 rx.controlEvent(event: .editingDidEndOnExit) 가 불리지 않을 때
누알라리
2021. 12. 7. 10:42
textField의 textFieldShouldReturn(_ :) 메서드를 확인하자.
UITextField의 .editingDidEndOnExit controlEvent를 구독하여 키보드에서 return키가 눌릴 때 원하는 처리를 할 수 있다.
하지만 최근 기존 textField를 리팩토링하면서
self.rx.controlEvent(event: .editingDidEndOnExit).subscribe(onNext: { [weak self] in
guard let s = self else { return }
// do something
}).disposed(by: self.disposeBag)
이런 코드를 넣어 .editingDidEndOnExit 를 구독하려고 했더니 저 event가 불리지 않았다.
이유를 찾아보니 기존 textField의 delegate에서 textFieldShouldReturn 메서드가 정의되어 있었다.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
secondTextField.becomeFirstResponer()
return true
}
.editingDidEndOnExit 이벤트는 textFieldShouldReturn 메서드에 becomeFirstResponder()같이 editingAction류(?) 로직이 들어가있으면 액션(?)을 빼앗기는것 같다.
textFieldShouldReturn(_ :) 안의 editing 구문을 빼고 무조건 return true 시키거나,
textFieldShouldReturn(_ :) 를 삭제하면
기존 의도대로 rx.controlEvent(.editingDidEndOnExit)가 호출된다.
출처:
https://stackoverflow.com/questions/60669459/rxswift-control-event-with-uitextfielddelegate