2017-12-09 2 views
0

모든 텍스트 필드를 찾고 유효성을 검사하기 위해 사용자가 '가입'을 탭하면 하위 뷰를 반복하려고합니다. 텍스트 필드는 사용자 정의 클래스입니다. 루프에서 텍스트 필드를 찾을 수 없습니다. 무엇이 문제 일 수 있겠습니까? 텍스트 필드는 인터페이스 빌더 스토리 보드에 추가되고 클래스의 ViewController에서 제대로사용자 정의 텍스트 필드 클래스를 찾을 수없는 서브 뷰를 통한 루프 ...?

콘센트를 설정 한 :

@IBOutlet weak var usernameTextField: LoginTextFields! 
@IBOutlet weak var emailTextField: LoginTextFields! 
@IBOutlet weak var passwordTextField: LoginTextFields! 
@IBOutlet weak var confirmTextField: LoginTextFields! 

내가 시도 :

private func validateTF() { 
    print("validate") 

    for view in self.view.subviews { 
     if let tf = view as? LoginTextFields { 
      print("found one") 
      if tf.isEmpty(){ 
       //alert 
      } else if tf.tag == 2 && !tf.isValidEmail(email: emailTextField.text!) { 
       //alert 
      } 
     } 
    } 
} 

나는 또한 시도 :

for view in self.view.subviews { 
     print(view) 
     if view.isKind(of: LoginTextFields.self) { 
      print("tf found") 
      let tf = view as! LoginTextFields 
      if tf.isEmpty() { 
       //alert 
      } else if tf.tag == 2 && !tf.isValidEmail(email: emailTextField.text!) { 
       //alert 
      } 
      print("nps") 
     } 
    } 
+0

텍스트 필드가보기 컨트롤러의보기에 어떻게 추가 되었습니까? 코드를 통해? 스토리 보드? 텍스트 필드를 참조하는 콘센트 또는 속성이 있습니까? – rmaddy

+0

@rmaddy가 코드와 정보로 업데이트되었습니다! 스토리 보드를 통해 추가되고 커스텀 클래스가 명확하게 설정되고 클래스가 일치합니다 – user7804097

+2

아울렛이있는 경우 왜 루프를 작성하여 찾을 수 있습니까? 이미 액세스 권한이 있습니다. – rmaddy

답변

0

귀하의 질문에 구체적으로 답변하지는 않지만 구체적으로 (muc 더 나은) 대안.

보기에 태그를 사용하지 마십시오. 그들의 사용은 정말 나쁜 패턴을 조장합니다. 보기를 통해 반복하여 전자 메일 텍스트 필드를 얻는 것.

대신 텍스트 필드마다 속성을 만들어야합니다.

let emailTextField: LoginTextField = someTextField

기타 ...

당신은 루프를하지 않아도 그런 식으로. 전자 메일 텍스트 필드와 암호 텍스트 필드 등을 확인하면됩니다. 편집 한 후

...

당신은 이미 속성을 가지고있다. 그럼 왜 너는 어떤 일을 반복하고 있니?

속성을 확인하기 만하면됩니다.

+0

@ user7804097 좀 더 우아하게하려면 텍스트 필드에 함수를 추가 할 수 있습니다. 'isValid'와 같은 클래스를 호출 한 다음'blah.isValid' 또는 그와 비슷한 코드를 반복하면 코드를 반복 할 필요가 없습니다. 각각의 함수를 확인하면됩니다. – Fogmeister

+0

duhhh LOL. thanks ... but is it 여전히 이상한 것은 그것을 찾지 못한다 ..? – user7804097

+2

@ user7804097 그것은 당신이보기 및보기 계층 구조가 어떻게 설정되어 있는가에 달려있다. 하위 뷰 반복은 "한 층"깊숙이 갈 것이다. otherView - textField' then iterat 'view.subviews'는 텍스트 필드를 찾지 못합니다. – Fogmeister