단지 TextField에 작성된 Text와 버튼을 통해 입력을 받을 수 있는거 아닌가 싶겠지만,
그 중간 과정들을 개발자가 조정할 수 있다.
그럴때 사용하는 프로토콜이 UITextFieldDelegate 다.
1
먼저, 텍스트 필드를 클릭하면 textFieldShouldBeginEditing 메서드가 호출된다.
Edit을 시작할 것인지 묻는다고 생각하면 된다.
false를 리턴하면 키보드도 나타나지 않고 입력 자체가 불가능하다.
true가 반환되면 다음 과정들이 진행된다.
2
- textFieldDidBeginEditing 이 호출된다.
입력이 시작됐을 때 실행될 기능들을 이 함수에 넣어주면 된다.
- textFieldShouldClear 이 호출된다.
텍스트를 모두 지울것인지 묻는 함수다.
true를 리턴하면 텍스트를 모두 지워버리고, false를 리턴하면 텍스트를 놔둔다.
3
키보드에서 return을 누르거나 키보드에서 입력후 엔터를 치면
textFieldShouldReturn 이 호출된다.
근데 도대체 반환값이 어떤역할을 하는지 모르겠다.
공식문서에 따르면
'true if the text field should implement its default behavior for the return button; otherwise, false.'
라는데, 도대체 어떤 기본동작이 있는지 모르겠다. 몇번을 테스트해도 변화가 안보였다.
우선은 패스.
4
TextField의 endEditing(_ force: Bool) 함수를 호출하면
textFieldShouldEndEditing 함수가 호출된다.
편집을 종료할지 묻는 함수다.
반환값으로 true를 리턴하면 편집이 종료되면서
textFieldDidEndEditing이 호출되고 키보드가 사라진다.
false가 리턴되면 그냥 끝난다.