일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Mock
- Codegen
- SWIFTUI
- Structures and Classes
- delegation
- 독서후기
- viewcontroller
- Failed to register bundle identifier
- 독후감
- 부트캠프
- 야곰아카데미
- UIResponder
- 스타트업주니어로살아남기
- @available
- SWIFT
- NotificationCenter
- NumberFormatter
- roundingMode
- Navigation
- human interface guidelines
- 스위프트
- IOS
- mvvm
- contentInset
- 책후기
- View Life Cycle
- Info.plist
- Modality
- 아이폰
- xcode
- Today
- Total
호댕의 iOS 개발
[iOS] 터치와 제스쳐 둘다 받고 싶다면? cancelsTouchesInView 본문
😱 문제 상황
TextView나 셀이 아닌 부분을 터치하면 키보드가 내려가도록 구현하려고 TapGestureRecognizer를 등록하여 키보드가 내려가도록 했다. 하지만 이렇게 하니 다른 터치 이벤트가 전달이 안되어 터치가 필요한 곳도 터치를 인식하지 못하고 키보드만 꺼지는 문제가 있었다.
그래서 발견한 해결책!!을 말하기 전에 Gesture Recognizer에 대해 좀 더 알아보자.
🔭 UIGestureRecognizer
Gesture Recognizer를 사용하게 되면 터치 이벤트를 전달하기 전에 Gesture Recognizer에 터치 이벤트를 전달하게 된다.
또한 Gesture Recognizer가 제스처를 인식하게 되면 나머지 터치는 모두 취소되게 된다.
즉 위 문제 상황에서도 다른 터치들이 모두 탭으로 인식되어 Gesture Recognizer가 키보드를 내려가도록 하고 터치는 전부 취소해버리는 것이었다.
그러니... 아무리 셀을 터치해도 동작을 안한 것이었다.
이때 사용할 수 있는 것이 바로 .cancelsTouchesInView이다.
🧹 .cancelsTouchesInView
이는 UIGestureRecognizer의 인스턴스 프로퍼티로 기본이 true이다. 따라서 Gesture Recognizer에 제스처를 전달하고 다른 터치들은 전부 취소를 하게 된다.
따라서 제스처이외에도 터치를 전부 수신하고 싶다면 해당 프로퍼티를 false로 해주면 된다.
따라서 이를 false로 해주었더니 터치를 했을 때 키보드가 내려가면서 셀도 잘 눌렸다.
해결책은 엄청나게 간단했지만 해당 프로퍼티의 존재를 모르고 있다면 충분히 해맬 수 있다.. 나 또한 엄청 헤매다가 찾았고 말이다..
'Software Engineering > iOS' 카테고리의 다른 글
[iOS] TextField, TextView에 그림자(shadow) 주기 + 동그란 label 만들기 (0) | 2022.03.11 |
---|---|
[라이브러리] 라이브러리를 어떤 기준으로 선택하면 좋을까? (0) | 2022.03.01 |
[iOS] 사용자에게 알림을 띄우고 싶다면? User Notifications (+ APNs 파일 생성하기) (0) | 2022.02.28 |
[iOS] .autoupdatingCurrent VS current (0) | 2022.02.27 |
UISearchController, 검색을 이렇게 간단하게?! (0) | 2022.02.25 |