UIKit) Text Delegates
Text Field Delegate & Text View Delegate 배워보기.
공식 문서
텍스트 필드와 텍스트뷰는 델리게이트패턴을 통해 이벤트를 처리한다.
이벤트 처리에 사용되는 메서드는 각각의 프로토콜에 선언되어있다.
앞에서 배웠던 두 텍스트 처리패턴이 비슷한것 처럼 두 프로토콜에 선언되어있는
메서드와 호출 시점도 유사하다.
텍스트 필드와 텍스트 뷰를 탭하게 되면
Tap -> First Responder 호출 -> Editing Session 전환
First Responder가 호출 되고 편집모드로 전환된다. 그리고 키보드가 나타난다.
더 상세히 알아보면 Tap 시점에 델리게이트 메서드가 호출되고 여기서 True를 리턴하면
First Responder가 된다.
textFieldShouldBeginEditing(_:)
textViewShouldBeginEditing(_:)
이 메서드를 구현하지 않으면 True를 리턴하는 것과 비슷하다.
편집모드가 시작된 직후에는
textFieldDidBeginEditing(_:)
textViewDidBeginEditing(_:)
이 메서드가 실행되고, 이 후 텍스트를 입력하거나 삭제하면
연관된 델리게이트 메서드가 반복적으로 호출하게 된다.
// 입력 할 수 있는 길이를 제한하거나 특정 문자의 입력을 금지
textField(_:shouldChangeCharactersIn:replacementString:)
// 메서드와 파라미터이름은 다르지만 textField와 동일한 기능 구현
textVIew(_:shouldChangeTextIn:replacementText:)
위 의 코드가 실행되고나서 각각의 메서드가 호출된다.
// 삭제버튼을 클릭 했을 때 실행
textFieldShouldClear(_:)
// 사용자가 직접 편집을 했을 때 연달아 실행
textViewDidChange(_:)
메서드 이름에 should 가 포함되어있다면 Bool값을 리턴해야 한다.
textFieldShouldClear(_:)메서드에 True를 리턴하면 입력된 값을 삭제한다.
// textField에서 리턴키를 탭했을때 호출
textFieldShouldReturn(_:)
// textView에서 특정법위를 선택하거나 입력포인트를 이동시킬 때 호출
textViewDidChangeSelection(_:)
textVIew는 attachment객체를 통해서 이미지를 텍스트와 함께 출력 할 수 있다.
또는 Date detector를 통해 해당 속성에 맞게 인식할 수 있다.
textView(_:shouldInteractWith:in:interaction:)
이런 객체들을 터치할 때 호출 되는 메서드가 textView(_:shouldInteractWith:in:interaction:)이다.
편집모드가 종료되기 직전에는 밑에 두 메서드가 호출된다.
textFieldShouldEndEditing(_:)
textViewShouldEndEditing(_:)
위의 메서드에서 True를 리턴하게 되면 편집모드가 종료하게 되고
키보드가 화면에서 사라진다. (false를 입력하면 입력포커스 그대로 유지!)
편집모드가 종료된 직후에는 밑에 두 메서드가 호출된다.
textFieldDidEndEditing(_:)
textCiewDidEndEditing(_:)
여기까지해서 두 Text개체의 델리게이트가 구현되는 과정을 알아보았다.
정말 textField와 textView의 델리게이트가 유사한 패턴을 가진것을 느낄 수 있다!!
첫번 째 파라미터에는 항상 메서드를 호출한 뷰가 전달된다.
하나의 씬에 여러개의 textFiedl와 textView가 추가되어있고 델리게이트가 동일한 객체로 저장되어 있는 경우
첫번 째 파라미터를 통해 코드를 분기할 수 있다.
Comments