[iOS] TextFieldDelegate - Login

RudinP·2024년 2월 21일
0

Study

목록 보기
174/227

Return Key

Return Key 옵션

  • 선택하면 리턴 키의 텍스트를 바꿔준다.
  • 속성에 없는 타이틀은 따로 설정할 수 없다.

UITextFieldDelegate

1. 입력을 시작하면textFieldShouldBeginEditing(_:) 실행. false 리턴 시 아무런 작업 하지 않고 끝

2. 1 에서 true를 리턴 시 first responder가 됨. 키보드가 표시되며 keyboardWillShowNotification과 keyboardDidShowNotification을 포스트

3. delegate에게 텍스트필드가 편집이 시작되었다고 알려줌, textFieldDidBeginEditing(_:) 호출.

  • ~Did, ~Will이 들어간 메소드는 단순히 이벤트가 발생했다는 것만 알려주기 때문에 ~Should와 다르게 리턴 타입은 없다.

4. 사용자가 다양한 방식으로 편집하면 텍스트필드가 다시 delegate에게 알려줌, shouldChangeCharactersIn 호출.

  • 리턴 타입 Bool. true면 편집 내용 확정, false면 편집을 취소하고 이전 상태로 돌아감.
  • textFieldShouldClear에서 true를 리턴해야지만 실제로 삭제됨
  • 사용자가 키보드에서 리턴 키를 누르면 textFieldShouldReturn이 호출

5. 다른 필드로 이동하거나 편집이 끝나면 textFieldShouldEndEditing 호출

  • false면 편집 상태 유지. true 리턴하면 편집이 끝남

6. 편집을 끝내면 텍스트필드가 first responder가 아니게 되고 키보드가 사라짐

  • textFieldDidEndEditing 호출

리턴 키를 누를 시 다음 입력 필드로 이동하도록 하는 기능


textFieldShouldReturn(_:)을 이용한다.

  • 기본 동작을 구현해야 한다면 true를, 아님 false를 리턴.
    • 간혹 어떤 조건에서 자동으로 오타 수정과 같은 동작이 필요하면 true를 리턴하면 된다.
  • 대부분의 경우 큰 차이가 없기 때문에 아무거나 해도 되지만, 보통 false를 리턴하면 된다.

UITextFieldDelegate 구현

1. 델리게이트 연결

  • 여러 개의 텍스트필드에서 하나의 vc에 delegate를 연결해도 문제는 없다.

2. UITextFieldDelegate 프로토콜 채택

3. textFieldShouldReturn 메소드 구현

  • 리턴 키를 눌렀을 때 입력 포커스를 가진 텍스트필드에서 이 메소드를 호출, 메소드를 호출한 텍스트필드가 이 메소드에 전달됨.
  • 즉, textField 객체에 따라 idField라면 passwordField 칸으로, passwordField라면 로그인을 시도하도록 하면 됨.

입력 길이 제한

textFieldShouldEndEditing

  • 텍스트필드 편집이 끝날 때 호출
  • true를 리턴하면 편집이 끝나고 다른 필드로 포커스가 이동하거나, 이동할 곳이 없다면 키보드가 사라짐
  • false를 리턴하면 편집이 끝나지 않음
  1. id의 길이가 6~12가 아니면 리턴키를 눌러도 비밀번호 텍스트필드로 이동하지 않음
  2. 동시에 텍스트필드 테두리가 붉은색, 입력 인디케이터도 붉은색으로 함
  • 텍스트필드의 테두리를 임의로 바꿀 수 없기 때문에, 직접 그려서 얹어줘야함.

  • borderColor속성은 CGColor이기때문에 UIColor.red.cgColor 사용
  • 매번 편집을 끝낼 때마다 이 메소드가 호출되기 때문에, 제대로 입력하고 끝내면 기본 컬러로 복구된다.

실행 화면

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글