본문 바로가기

swift

[tapGesture.cancelsTouchesInView = false] <- 이게 뭔데

private func textfieldSetting() {
   let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
   tapGesture.cancelsTouchesInView = false // 텍스트필드 터치도 살아있게
    view.addGestureRecognizer(tapGesture)
}

 @objc func dismissKeyboard() {
    view.endEditing(true)
}

 

위의 코드는 텍스트 필드의 키보드를 내릴 때 사용할 때 사용된다.

바깥 뷰를 클릭하여 키보드를 내릴 때 사용한다.

 

그런데 이 코드에서 아래 부분이 이해가 안된다.

tapGesture.cancelsTouchesInView = false

cancelsTouchesInView은 기본 값은 true

true -> 제스쳐가 인식되면 터치 이벤트가 원래 뷰로 전달되지 않는다.

false -> 제스쳐가 인식되도 터치 이벤트를 원래 뷰(텍스트필드)에 전달

 

화면 아무데나 터치해서 키보드를 내리거나 텍스트 필드 눌러서 입력을 하고 싶을 때 사용 

 

바깥 뷰를 눌렀을 때 터치 이벤트를 텍스트 필드에도 전달하면 

키보드가 다시 올라오지 않을까?

NO!

키보드가 올라와있을때 텍스트 필드가 터치되면 becomeFirstResponder()는 무시된다.