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

 

 

'iOS > RxSwift' 카테고리의 다른 글

RxSwift란?  (0) 2021.11.02