-
UITextField, UITextFieldDelegateiOS/UICatalog 2022. 4. 4. 13:53
UITextFieldDelegate: 텍스트 필드 객체의 텍스트 편집 및 유효성 검사를 관리하는데 사용
사용자가 입력한 텍스트를 검증하고 키보드와의 특정 상호작용에 응답하며, 전체 편집 프로세스를 제어하는데 이 메소드들을 사용한다. 편집은 텍스트 필드가 first responder가 되기 직전에 시작되고 키보드(또는 할당된 input view)를 표시한다. 편집 과정의 흐름은 다음과 같다.
키보드를 내리고 싶을 때
두가지 방법이 있다.
- 키보드의 리턴키를 눌러서 끝내기
키보드의 리턴키를 누르면 textFieldShouldReturn(_:) 델리게이트 메소드가 호출된다.
이 메소드 내에서 textField.resignFirstResponder() 메소드를 호출하면 된다. - func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true }
- 화면 다른 곳을 터치시켜서 끝내기
UIViewController의 touchesBegan(_:, with:) 메소드를 오버라이드하고 내부에서 view.endEdting(_:) 메소드를 호출한다. - override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) }
UITextFieldDelegate 메소드 호출 순서(Keyboard-Related Notification은 생략)
- textField가 firstResponder가 되기 전에, textFieldShouldBeginEditing(_:) 메소드를 호출
- 텍스트 필드의 내용의 편집을 허용하거나 방지하려면 이 메소드를 사용 - textField가 firstResponder가 된다.
시스템은 키보드(또는 텍스트 필드의 input view)를 표시하고 필요에 따라 keyboardWillShowNotification, keyboardDidShowNotification 알림을 전송.
키보드나 다른 input view가 보이면, keyboardWillChangeFrameNotification, keybardDidChangeFrameNotification 알림을 대신 전송 - textFieldDidBeginEditing(_:) 메소드를 호출
- 1) text가 바뀔 때 마다, textField(_:shouldChangeCharactersIn:replacementString:) 메소드를 호출한다. 이 메소드는 Bool 타입을 리턴하여 편집 유무를 확인한다. 이때 shouldChangeCharactersIn 인자는 편집될 범위를 나타내고, replacementString은 대체할 문자를 나타낸다.
2) 사용자가 텍스트를 지우기 위해 내장된 버튼을 누르면 textFieldShouldClear(_:) 메소드를 호출한다.
3) 사용자가 키보드의 리턴버튼을 누르면 textFieldShouldReturn(_:) 메소드를 호출한다.
5. textField가 firstResponder를 resign하기 직전에, textFieldShouldEndEditing(_:) 메소드를 호출한다.
Bool 타입을 반환한다. 현재 textField에 입력된 텍스트의 validation을 검증할 때 주로 사용한다.
6. textField가 firstResponder를 resign한다.
7. textFieldDidEndEditing(_:) 메소드를 호출한다.'iOS > UICatalog' 카테고리의 다른 글
UITabbar vs UIToolbar (0) 2022.04.13 UITabBarController, UICollectionView (0) 2022.04.06 UITableView (0) 2022.04.03 UIStackView (0) 2022.04.03 UIButton (0) 2022.03.21 - 키보드의 리턴키를 눌러서 끝내기