개발/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)
    }

이거 넣어주면 잘 됨