서브클래싱, 커스텀UI에 Rx적용하기

Henry Lee·2022년 1월 24일
0

서론

특별한 건 아니고, UIControl을 상속해서 만든 CustomTextField가 있다. 굳이 UITextField를 상속해서 만들지 않았던 이유는, CustomTextField를 UIView처럼 사용해야 하기 때문이었다. 만약 UITextField를 사용했다면, 사이즈나, 애니메이션 등에서 불편한게 많기 때문이라고 생각.

구현

어쨌든 그래서 UIControl을 사용해서 프로퍼티로 UITextField를 주입했는데
잘 알겠지만 TextField를 rx로 바인딩 할때

let textField = UITextlField()
textField.rx.text //ControlProperty<String>

이런식으로 사용하는데

지금 형식은 View에서는 CustomTextField의 text속성에만 접근이 가능하고 UITextField에는 접근이 불가능하다. text속성에 rx 바인딩을 하고 싶어서 찾아봤는데, 생각보다 구글에 만족할 만한 답변이 없어 이것저것 시도해 보다가, 너무 심플하게 해결 됐다.

  public lazy var rxText: ControlProperty<String?> = {
    self.textField.rx.text
  }()

CustomTextField내부에서 textField.rx.text를 바인딩 하는 프로퍼티가 있으면 된다.

let input = PhoneAuthViewModel.Input(
      textInput: textField.rxText.orEmpty.asObservable(),
      button: button.rx.controlEvent(.touchUpInside).asObservable())

view에서는 위 처럼 사용할 수 있다.

profile
iOS Dev, Coffee in my bloodstream

0개의 댓글