diff --git a/SOPTving/SOPTving/Presentation/AuthScene/View/AuthTextField.swift b/SOPTving/SOPTving/Presentation/AuthScene/View/AuthTextField.swift index c914e06..d0606cd 100644 --- a/SOPTving/SOPTving/Presentation/AuthScene/View/AuthTextField.swift +++ b/SOPTving/SOPTving/Presentation/AuthScene/View/AuthTextField.swift @@ -10,12 +10,15 @@ import UIKit import SnapKit import Then +protocol AuthTextFieldDelegate: UITextFieldDelegate { + func authTextFieldTextDidChange(_ textFieldType: AuthTextField.TextFieldType, text: String) +} + final class AuthTextField : UITextField { //MARK: - Properties - typealias handler = ((String) -> Void) - private var updateHandler: handler? + weak var authDelegate: AuthTextFieldDelegate? enum TextFieldType { case email @@ -127,10 +130,6 @@ final class AuthTextField : UITextField { } } - public func setUpdateHandler(updateHandler: @escaping handler) { - self.updateHandler = updateHandler - } - //MARK: - Action Method @objc @@ -165,7 +164,7 @@ extension AuthTextField: UITextFieldDelegate { func textFieldDidChangeSelection(_ textField: UITextField) { updateClearButtonUI() guard let text = textField.text else { return} - updateHandler?(text) + authDelegate?.authTextFieldTextDidChange(textFieldType, text: text) } } diff --git a/SOPTving/SOPTving/Presentation/AuthScene/ViewContoller/SignInVC.swift b/SOPTving/SOPTving/Presentation/AuthScene/ViewContoller/SignInVC.swift index de82e45..ab6ff20 100644 --- a/SOPTving/SOPTving/Presentation/AuthScene/ViewContoller/SignInVC.swift +++ b/SOPTving/SOPTving/Presentation/AuthScene/ViewContoller/SignInVC.swift @@ -68,7 +68,7 @@ final class SignInVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() - target() + delegate() binding() style() hierarchy() @@ -84,20 +84,13 @@ final class SignInVC: UIViewController { extension SignInVC { - private func target() { - emailTextField.setUpdateHandler { [weak self] text in - guard let self else { return } - self.viewModel.idTextFieldDidChangeEvent(text) - } - - passwordTextField.setUpdateHandler { [weak self] text in - guard let self else { return } - self.viewModel.passwordTextFieldDidChangeEvent(text) - } + private func delegate() { + emailTextField.authDelegate = self + passwordTextField.authDelegate = self } private func binding() { - viewModel.ableToLogin.observe(on: self) { [weak self] isEnabled in + viewModel.ableToSignIn.observe(on: self) { [weak self] isEnabled in self?.updateSignInButtonUI(isEnabled) } viewModel.isSuccessLogin.observe(on: self) { [weak self] result in @@ -195,3 +188,14 @@ extension SignInVC { } } +extension SignInVC: AuthTextFieldDelegate { + func authTextFieldTextDidChange(_ textFieldType: AuthTextField.TextFieldType, text: String) { + switch textFieldType { + + case .email: + self.viewModel.emailTextFieldDidChangeEvent(text) + case .password: + self.viewModel.passwordTextFieldDidChangeEvent(text) + } + } +} diff --git a/SOPTving/SOPTving/Presentation/AuthScene/ViewModel/SignInViewModel.swift b/SOPTving/SOPTving/Presentation/AuthScene/ViewModel/SignInViewModel.swift index 38b94ef..fcfda33 100644 --- a/SOPTving/SOPTving/Presentation/AuthScene/ViewModel/SignInViewModel.swift +++ b/SOPTving/SOPTving/Presentation/AuthScene/ViewModel/SignInViewModel.swift @@ -14,13 +14,13 @@ enum AuthError: Error { } protocol SignInViewModelInput { - func idTextFieldDidChangeEvent(_ text: String) + func emailTextFieldDidChangeEvent(_ text: String) func passwordTextFieldDidChangeEvent(_ text: String) func signInButtonDidTapEvent() } protocol SignInViewModelOutput { - var ableToLogin: Observable { get } + var ableToSignIn: Observable { get } var isSuccessLogin: Observable> { get } } @@ -33,7 +33,7 @@ final class DefaultSignInViewModel: SignInViewModel { //MARK: - Output - var ableToLogin: Observable = Observable(false) + var ableToSignIn: Observable = Observable(false) var isSuccessLogin: Observable> = Observable(.failure(.invalidEmail)) //MARK: - Init @@ -47,14 +47,14 @@ final class DefaultSignInViewModel: SignInViewModel { extension DefaultSignInViewModel { - func idTextFieldDidChangeEvent(_ text: String) { + func emailTextFieldDidChangeEvent(_ text: String) { self.email = text - self.ableToLogin.value = email.hasText && password.hasText + self.ableToSignIn.value = email.hasText && password.hasText } func passwordTextFieldDidChangeEvent(_ text: String) { self.password = text - self.ableToLogin.value = email.hasText && password.hasText + self.ableToSignIn.value = email.hasText && password.hasText } func signInButtonDidTapEvent() { @@ -76,6 +76,5 @@ extension DefaultSignInViewModel { } isSuccessLogin.value = .success(true) - } } diff --git a/SOPTving/SOPTving/Utility/Builder/AuthTextFieldBuilder.swift b/SOPTving/SOPTving/Utility/Builder/AuthTextFieldBuilder.swift index e38ab60..a6f0737 100644 --- a/SOPTving/SOPTving/Utility/Builder/AuthTextFieldBuilder.swift +++ b/SOPTving/SOPTving/Utility/Builder/AuthTextFieldBuilder.swift @@ -12,7 +12,6 @@ protocol TextFieldBuilder { func setPlaceholder(text: String, color: UIColor) -> Self func setLeftPaddingAmount(_ offset: CGFloat) -> Self func setCornerRadius(_ radius: CGFloat) -> Self - func setCompletionHandler(completion: @escaping AuthTextField.handler) -> Self } //MARK: - Builder @@ -66,11 +65,6 @@ final class AuthTextFieldBuilder: TextFieldBuilder { textField.addRightButton(button) return self } - @discardableResult - func setCompletionHandler(completion: @escaping AuthTextField.handler) -> Self{ - textField.setUpdateHandler(updateHandler: completion) - return self - } }