화면 및 Return/Enter 키를 터치했을 때 키보드 처리 방법들
Closed this issue · 0 comments
EunHee-Jeong commented
상황
- 사용자로부터 값을 입력 받은 후에, 키보드를 내려줄 때의 비동기적인 이벤트(배경화면 터치, Return 키를 누름 등) 처리
아이디어
Delegate 프로토콜
을 사용한다.- 적용할 클래스가
UITextFieldDelegate
및UITextViewDelegate
프로토콜을 채택하도록 하고, 해당 textField (또는 textView)의 Outlet 변수의 delegate를 지정하여 원하는 함수들을 사용하도록 한다.
1. 그동안 썼던 방법
i. 텍스트필드의 참조가 없거나 확실하지 않은 상황
-
배경을 터치하면 키보드가 내려가도록
touchesBegan()
메서드를 오버라이드하여 사용하였다.override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { super.touchesBegan(touches, with: event) if let touch = touches.first, touch.view == self.view { view.endEditing(true) } }
-
코드 설명
-
touch
객체의 정보들 중에서, 현재의 touch 이벤트(=touches.first
)가 일어난 view (=touch.view
)가 배경 view (=self.view
)와 같은 지를 확인하고, -
같다면 편집을 끝낸다.
-
endEditing()
-
최초 반응자를 사임해주는 메서드
-
view에 포함된 키보드를 사라지게 함
-
-
-
주의사항 → 재정의하는 경우에는 특정 시점에서
super
를 호출해야함
-
-
ii. 텍스트 필드의 참조가 있어 확실한 상황
-
return 키를 UITextFieldDelegate 프로토콜을 이용해 처리해주었다.
func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() // 텍필 비활성화 return true }
-
resignFirstResponder()
공식 문서→ Notifies the receiver that it’s been asked to relinquish its status as first responder in its window.
→ window 객체에서 첫 번째 응답자로서의 상태를 포기하도록 요청 받았음을 해당 객체에 알림
-
첫 번째 응답자(= first responder, 최초 반응자)란?
-
시스템이 자동으로 키보드를 표시하게 하고, 입력을 텍스트 필드에 바인딩하는 역할을 맡음.
-
흐름 (출처 - iOS 키보드 내려가게 하는 방법)
-
-
-
3. 새롭게 알게 된 방법
- 엔터 키 (개행 문자) 를 눌렀을 때 textView의 활성화를 포기하는 요청을 보내서 키보드 내리기
-
코드
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if text == "\n" { textView.resignFirstResponder() return false } return true }
-
사용한 이유
- textField 대신 textView를 이용해 입력창을 구현하던 중 알게 되었다.
-