티스토리 뷰

반응형

SWIFT에서 키보드를 숨기는 기능이 빈번히 발생합니다. 예를 들면 검색바에서 검색 도중 화면 클릭 시 키보드 사라지게 하는 로직 등 다양하게 사용됩니다.


(TextField or UISearchBar).resignFirstResponder()


보편적으로 사용하는 기능은 resignFirstResponder()를 호출하여 키보드 숨깁니다. 하지만 이 함수를 키보드 숨길 때마다 호출해야하는 문제점이 있습니다. 


ViewController를 extension 하여 키보드 숨기는 함수를 추가한다면 키보드 숨길 때마다 호출하는 문제를 해결 할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
// MARK: 키보드 숨기기(단, 모든 클릭 시 키보드 숨기기 함수가 호출됨)
// 원하는 곳에 배치
extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }
    
    func dismissKeyboard() {
        view.endEditing(true)
    }
}
 



참고로 extension은 Utils.swift을 만들어서 선언 또는 AppDelegate.swift 에서 한번에 모아서 선언하는게 차후에 수정 시 편합니다. 


키보드가 있는 UIViewController에서 extention에서 구현한 함수인 hideKeyboardWhenTappedAround() 을 선언하면 Guesture를 통하여 View 클릭 시 키보드 사라지는 로직을 구현할 수 있습니다. 


1
2
3
4
5
6
override
func viewDidLoad() {
    super.viewDidLoad()
        
    self.hideKeyboardWhenTappedAround()
}



기본 View 가 아닌 다른 View를 터치 시 키보드 사라지고 싶은 부분에 다음 함수를 사용하시면 됩니다.


'(Target)View.hideKeyboardWhenTappedAround'


정리

extension 을 통한 키보드 숨기는 기능은 한번 등록하면 사용하는 View에 hideKeyboardWhenTappedAround 를 넣어주면 됩니다. 등록만 하면 화면 터치를 감지하여 키보드를 숨기니 개발자 입장에서는 따로 신경 안써도 되서 좋은 방법인거 같습니다.



반응형
댓글