iOS/RxSwift

RxSwift) textField.rx.text 텍스트가 변경될 때만 이벤트 감지

skyiOS 2023. 11. 24. 01:32
반응형
반응형
텍스트 필드의 텍스트가 변경 될 때가 아닌상태에서도 이벤트를 방출 하고있어서 찾아봤습니다.

문제점

회원가입을 받는 화면에서 이메일 중복 확인을 하는 기능이 있습니다.

중복 확인을 한 후에 이메일을 변경할 경우 다시 중복체크를 하기위해 값을 false 로 넘겨 주고 있었는데 다음 텍스트 필드로 넘어갈 때 이벤트가 방출되는 현상이 있었습니다.

	let input = SignUpViewModel.Input(
            emailTextfieldChange: mainView.emailTextField.rx.text.orEmpty,
            // 생략
            )
    input.emailTextfieldChange
            .bind(with: self) { owner, text in
                print(text)
                owner.emailText = text
                owner.emailCheck.accept(false)
            }.disposed(by: disposeBag)
UITextField+Rx.swift 파일에 controlPropertyWithDefaultsEvents 에 들어가줍니다.

valueChanged 와 함께 allEditingEvents 의 이벤트가 발생할때 textField 의 text 값을 반환 해줍니다.


allEditingEvents

텍스트필드에 대한 모든 편집 이벤트 라고 합니다.
즉, 값을 수정하지 않아도 수정을 위해 터치 하는 것,입력이 끝난 후 포커스가 옮겨지는 것  또한 포함됩니다.

 

 

distinctUntilChanged()

이전의 값과 비교해서 다른 값일때 이벤트를 방출
해당 함수를 이용해서  text 값이 변할 때만 이벤트를 방출해서 구독합니다.
 input.emailTextfieldChange
            .distinctUntilChanged()
            .bind(with: self) { owner, text in
                print(text)
                owner.emailText = text
                owner.emailCheck.accept(false)
            }.disposed(by: disposeBag

 

반응형

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

RxSwift) UITextView 동적 높이 조절  (1) 2024.02.06