반응형
반응형
텍스트 필드의 텍스트가 변경 될 때가 아닌상태에서도 이벤트를 방출 하고있어서 찾아봤습니다.
문제점
회원가입을 받는 화면에서 이메일 중복 확인을 하는 기능이 있습니다.
중복 확인을 한 후에 이메일을 변경할 경우 다시 중복체크를 하기위해 값을 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 |
---|