swift4 ScrollView touchesBegan 안될 때 해결방법
■ 들어가며...
(초보가 공부하면서 나쁜 제 머리로 나중에 이런 문제가 발생하면 또 한동안 삽질을 하지 않을까 싶어서 참고 자료로 정리해놓는 글입니다. ^^ Swift4, Xcode 9.2)
■ 문제점
스크롤 뷰 안에 다른 뷰를 넣어서 앱을 만들 때 ScrollView 안에서는 touchesBegan 이벤트가 발생하지 않는다. 초보가 그 이유를 나름대로 생각해보니 화면을 터치할 때 이 터치가 스크롤뷰를 움직이기 위함인지 다른 터치 이벤트 발생을 위함인지 판단하지 못하기 때문인 거 같더라. 그래서 해결 방법을 찾아봤는데... UITapGestureRecognizer를 이용하면 된다.
화면이 작은 예전 아이폰을 고려해서 view에 스크롤뷰를 올린 후 그 안에 또 다른 view를 하나 넣어서 textField를 추가했다. 그리고 텍스트 입력이 끝나면 키보드를 감추기 위해서..
touchesBegan(){
self.view.endEditing(true)
}
...를 사용했지만 먹히지 않는다.ㅠ.
■ 해결방법
작동하지 않는 녀석이라서 현재는 주석 처리되어 있는 상태이고 이 문제를 해결하기 위해서 차선책으로 선택한 게 UITapGestureRecognizer를 사용하는 것이었다.
일단 viewDidLoad() 에서 UITapGestureRecognizer()을 불러온 후 몇 가지 설정을 하고 스크롤뷰에 연결을 했다. 그리고 이벤트가 발생했을 때 실행될 함수인 endEdit에는 touchBegan() 안에 있던 녀석을 그대로 옮겼으며 당연히 제대로 작동을 한다.
이렇게 간단하게 해결될 문제로 상당한 시간을 허비했는데 똑같은 문제가 발생했을 때 바로 참고하기 위해서 정리를 해놓는다.