이번 12강에서는 11강에서 다룬 컬렉션뷰에 대한 데모와 UITextField에 대해서 다뤘다. 이번 포스트에서는 UITextField에 대해서 배운 내용을 정리해봤다.
UITextField
사용자가 텍스트를 입력할 수 있는 객체다. UILabel과 비슷하면서 편집이 가능하다. 텍스트 기반 입력을 받을 때 일반 텍스트, 이메일, 숫자 등과 같은 다양한 유형의 입력을 받을 수도 있다. Delegate 객체를 사용해서 텍스트 편집 과정에서 변경된 내용에 대한 메서드들을 오버라이드 해서 사용할 수 있다.
키보드는 UITextField가 "first responder"가 될 때 나타난다.
First responder는 responder 체인의 첫 번째 responder다.
그럼 responder는 뭘까?
UIResponder
An abstract interface for responding to and handling events.
Responder 객체는 UIResponder를 상속받는 모든 객체를 말한다. 그리고 UIView, UIViewController, and UIApplication를 상속 받는 객체들도 responder 객체에 해당한다. Responder의 역할은 raw 이벤트 데이터를 처리하거나 다른 reponder 객체로 전달한다.
Responder chain
Responder Chain is the name given to an UIKit-generated linked list of UIResponder objects
Responder chain은 reponder 처리하는 순서라고 이해했다. 아래 그래프는 responder chain을 나타낸 예시다. UITextField에서 이벤트를 처리하지 않는다면 UIKit은 event를 UIView의 responder로 넘기게 되고 UIView에서 처리되지 않은 이벤트는 responder chain에 있는 다음 view의 responder로 전달된다.
UITextField가 tap되서 First responder로 지정될 때 키보드가 나타난다. Tap 하지 않아도 아래 두 메서드를 사용해서 코드로 키보드를 나타나거나 사라지게 할 수 있다.
func becomeFirstResponder() -> Bool
func resignFirstResponder() -> Bool
UITextFieldDelegate
textFieldDidBeginEditing(_:)
이 메서드를 사용하면 UITextField의 편집이 시작되었는지를 알 수 있다. 같은 의미로 UITextField가 first responder가 되었는지 확인할 수 있다.
optional func textFieldDidBeginEditing(_ textField: UITextField)
textField(_:shouldChangeCharactersIn:replacementString:)
이 메서드를 사용하면 UITextField의 텍스트 데이터가 바뀔 때마다 UITextField에 보여질 텍스트에 대한 처리를 해줄 수 있습니다. 예를 들면 글자 수를 제한하거나 특정 문자를 허용하지 않는 처리를 할 수 있습니다.
optional func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool
textFieldDidEndEditing(_:reason:)
텍스트 입력이 끝났는지를 알 수 있는 메서드다. 이 땐 이미 UITextField는 first responder가 아니다.
optional func textFieldDidEndEditing(_ textField: UITextField,
reason: UITextField.DidEndEditingReason)
위 3개 이외에도 여러 메서드들을 오버라이드해서 사용할 수 있다. 리액트로 웹 공부할 때는 컴포넌트 커스텀을 많이 해줬었는데 UIKit에서 여러 기능들을 제공해줘서 상대적으로 더 개발하기 편해질 것 같다.
참고 링크
- https://betterprogramming.pub/12-shades-of-keyboard-types-in-ios-a413cf93bf4f
- https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/using_responders_and_the_responder_chain_to_handle_events
- https://youtu.be/xkpuJejkWUI
- https://developer.apple.com/documentation/uikit/uitextfielddelegate
'CS193P' 카테고리의 다른 글
[iOS] 스탠포드 CS193P 11강 (0) | 2021.09.15 |
---|---|
[iOS] 스탠포드 CS193P 10강 (0) | 2021.09.14 |
[iOS] 스탠포드 CS193P 9강 (0) | 2021.09.02 |
[iOS] 스탠포드 CS193P 8강 (0) | 2021.09.02 |
[iOS] 스탠포드 CS193P 7강 (0) | 2021.09.01 |