개발? 새발!
개발? 새발!

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

2025.12.12

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로 설정하면
다른 버튼이나 컨트롤의 터치도 함께 동작할 수 있어요

관련 이미지 1

이미지 출처: 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)
}

화면 터치가 시작되면 바로 키보드를 내려줘요
간단하게 쓰기 좋은 방법이에요

관련 이미지 2

이미지 출처: 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()
}

관련 이미지 3

이미지 출처: 아_알겠습니다 - 티스토리

---

보너스! 제스처로 세밀하게 제어하기

여러 컨트롤이 섞여 있을 때
탭 제스처를 더 세밀하게 제어하고 싶다면 이렇게 해볼 수 있어요

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 방식을 제일 많이 쓰는데요
여러분은 어떤 방법이 제일 편하신가요?


이전 글 보기

Gemini Nano Android - 구글이 모바일에 심어놓은 작은 거인 🙂

이 블로그의 다음 이야기도 받아보세요

새 글 구독 (RSS)