iOS 키보드 내려가게 하는 방법 – 5가지 실전 코드로 완벽 정리

오늘은 iOS 개발하면서 정말 자주 마주치는 상황인데요
텍스트 필드 눌렀을 때 키보드는 자동으로 올라오는데 내리는 건 우리가 직접 구현해줘야 하잖아요?
그래서 준비했어요!
iOS 키보드 내려가게 하는 방법 5가지를 실전 코드와 함께 정리해볼게요
---
왜 직접 구현해야 하는데??
사실 텍스트 필드를 터치하면 자동으로 키보드가 올라오지만
사라지게 하는 건 iOS에서 자동으로 처리해주지 않아요
유저가 완료 버튼을 누르거나 빈 화면을 터치했을 때
우리가 직접 키보드를 내리는 코드를 작성해줘야 해요
그럼 바로 상황별로 어떻게 구현하는지 알아볼게요!
---
1. 화면 터치했을 때 키보드 내리기 (가장 많이 쓰는 방법!)
제일 기본이 되는 방법이에요
화면 아무 곳이나 터치하면 키보드가 내려가게 하는 거예요
ViewController에서 바로 구현
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self,
action: #selector(dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
view.endEditing(true)
}
}
UITapGestureRecognizer를 추가해서 화면 터치를 감지하고
dismissKeyboard() 함수에서 view.endEditing(true)를 호출해주면 끝!
cancelsTouchesInView를 false로 설정하면
다른 버튼이나 컨트롤의 터치도 함께 동작할 수 있어요
이미지 출처: THIS IS ELLIE - 티스토리
---
2. Extension으로 모든 화면에서 재사용하기
매번 뷰컨트롤러마다 같은 코드 쓰기 귀찮죠??
그럴 땐 Extension으로 만들어두면 정말 편해요
UIViewController Extension 만들기
import UIKit
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap = UITapGestureRecognizer(target: self,
action: #selector(UIViewController.dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
view.endEditing(true)
}
}
이렇게 Extension으로 만들어두면
필요한 뷰컨트롤러에서 한 줄만 추가하면 돼요
사용하는 방법
override func viewDidLoad() {
super.viewDidLoad()
hideKeyboardWhenTappedAround()
}
이름만 봐도 알 수 있듯이 hideKeyboardWhenTappedAround()만 호출해주면
화면 터치로 키보드를 내릴 수 있어요!
---
3. touchesBegan으로 간단하게 구현하기
더 간단한 방법도 있어요
touchesBegan을 오버라이드하는 거예요
override func touchesBegan(_ touches: Set, with event: UIEvent?) {
self.view.endEditing(true)
}
화면 터치가 시작되면 바로 키보드를 내려줘요
간단하게 쓰기 좋은 방법이에요
이미지 출처: THIS IS ELLIE - 티스토리
---
4. 키보드 완료 버튼 눌렀을 때 내리기
유저가 키보드의 완료나 Return 버튼을 눌렀을 때
키보드를 내려가게 하려면 UITextFieldDelegate를 사용해야 해요
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var nameTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
nameTextField.delegate = self
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
textFieldShouldReturn에서 resignFirstResponder()를 호출하면
first responder가 해제되면서 키보드가 내려가요
완료 버튼을 눌렀을 때 자연스럽게 키보드를 내리고 싶을 때 사용하면 좋아요!
---
5. 버튼 클릭할 때 키보드 내리기
검색 버튼이나 확인 버튼을 눌렀을 때처럼
특정 타이밍에 키보드를 내려야 할 때도 있죠?
@IBAction func searchButtonTapped(_ sender: Any) {
view.endEditing(true)
// 검색 로직 실행
performSearch()
}
버튼 액션에서 view.endEditing(true)를 호출해주면 돼요
특정 텍스트 필드만 끄고 싶다면 아래처럼 할 수도 있어요
@IBAction func loginButtonTapped(_ sender: Any) {
emailTextField.resignFirstResponder()
passwordTextField.resignFirstResponder()
// 로그인 처리
performLogin()
}
이미지 출처: 아_알겠습니다 - 티스토리
---
보너스! 제스처로 세밀하게 제어하기
여러 컨트롤이 섞여 있을 때
탭 제스처를 더 세밀하게 제어하고 싶다면 이렇게 해볼 수 있어요
class ViewController: UIViewController, UIGestureRecognizerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer()
tapGesture.delegate = self
self.view.addGestureRecognizer(tapGesture)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldReceive touch: UITouch) -> Bool {
self.view.endEditing(true)
return true
}
}
UIGestureRecognizerDelegate를 채택해서
터치 위치나 상황에 따라 키보드를 내릴지 말지 더 세밀하게 조절할 수 있어요
---
정리하면
iOS 키보드 내려가게 하는 방법을 상황별로 정리해봤어요!
1. 화면 터치 - UITapGestureRecognizer 활용
2. 재사용 Extension - hideKeyboardWhenTappedAround()
3. touchesBegan - 가장 간단한 방법
4. 완료 버튼 - UITextFieldDelegate 사용
5. 버튼 클릭 - endEditing() 직접 호출
각 상황에 맞는 방법을 선택해서 사용하면 돼요
저는 보통 Extension 방식을 제일 많이 쓰는데요
여러분은 어떤 방법이 제일 편하신가요?
이전 글 보기