개발/Swift
외부 영역 터치시 키보드 사라지게 하는방법 in TableView
덤벨로퍼
2022. 12. 5. 14:22
키보드를 입력중에 다른 영역을 터치하면
키보드가 사라지기를 원할수 있다.
이때 가장 쉬운 방법으로 이렇게 구현한다
//VC
private func setDismissKeyboardEvent() {
let gesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
self.view.addGestureRecognizer(gesture)
}
@objc private func dismissKeyboard() {
self.view.endEditing(true)
}
Viewcontroller의 뷰에 제스처를 부여해서
endEditing을 호출하면 키보드가 알아서 껒여준다.
그런데 여기서 문제점이 있다.
만약 view 안에 테이블뷰가 있고
테이블 뷰에 selection 이벤트가 있다면??
저 제스쳐 때문에 무시가되버림!!
그래서 구글링 결과
뷰에 터치하면 endEditing을 하지만
다른 이벤트를 막지는 않는걸 찾음 (cancelsTouchesInView)
private func setDismissKeyboardEvent() {
let gesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
gesture.cancelsTouchesInView = false //!!!
self.view.addGestureRecognizer(gesture)
}
@objc private func dismissKeyboard() {
self.view.endEditing(true)
}
이거 넣어주면 잘 됨