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를 리턴하면 편집이 끝나지 않음
- id의 길이가 6~12가 아니면 리턴키를 눌러도 비밀번호 텍스트필드로 이동하지 않음
- 동시에 텍스트필드 테두리가 붉은색, 입력 인디케이터도 붉은색으로 함
- 텍스트필드의 테두리를 임의로 바꿀 수 없기 때문에, 직접 그려서 얹어줘야함.
- borderColor속성은 CGColor이기때문에
UIColor.red.cgColor
사용
- 매번 편집을 끝낼 때마다 이 메소드가 호출되기 때문에, 제대로 입력하고 끝내면 기본 컬러로 복구된다.
실행 화면