iOS/Swift

[iOS] UICollectionView의 didSelectItemAt 메소드가 작동하지 않을 때 (Tap Gesture Recognizer)

2021. 11. 22. 23:07
목차
  1. 현상
  2. 원인
  3. 해결

현상


  • UICollectionView에서 Delegate 메소드인 didSelectItemAt 메소드를 구현했는데 이벤트가 들어오지 않았다.
  • Breakpoint를 걸어도 걸리지 않았다.
  • UICollectionView 객체의 delegate와 ViewController도 잘 연결되어 있었다
  • Storyboard에서 collectionView의 'User Interaction Enabled'도 잘 체크되어 있다.

원인


  • CollectionView가 속한 부모 view에 Tap Gesture Recognizer가 추가되어있었다.
  • 발생한 터치 이벤트가 Tab Gesture Recognizer로 인해  view로 터치 이벤트가 전달되지 않았기 때문에 didSelectAt 메소드가 수행되지 않았다. 
    • UIGestureRecognizer가 지정된 객체는 터치 이벤트 등 제스처 이벤트가 발생하면 해당 이벤트를 view로 보내기 전에 Gesture Recognizer로 전달한다
    • 제스처가 Gesture Recognizer에 등록된 것이라면 지정된 Action 메소드를 수행한다. 그리고 해당 이벤트를 view로 전달하지 않고 'Cancel' 시킨다
    • 제스처가 Gesture Recognizer에 등록되지 않은 것이라면 수행할 Action 메소드가 없다. 따라서 해당 이벤트를 view로 다시 전달한다. 

 

  • 결론적으로, UIGestureRecognizer가 gesture를 인식하고 Action메소드를 수행한 후 해당 이벤트를 view로 다시 전달하지 않았기 때문에 didSelectAt 메소드가 수행되지 않았다. (UIGestureRecognizer에 대한 자세한 설명: https://baked-corn.tistory.com/130)

해결


UIGestureRecognizer의 cancelsTouchesInView 속성의 값을 false로 설정한다. 이값이 false이면 Gesture Recognizer가 gesture를 인식해도 터치 이벤트들을 취소 시키지 않고 view에 터치 이벤트들을 전달하기 때문에 didSelectAt 메소드가 호출될 수 있다.

 

  • CancelsTouchesInView 
    • Gesture Recognizer가 gesture를 인식하면, 나머지 터치 정보들은 뷰로 전달되지 않고 이전에 전달된 터치 이벤트들은 취소된다. (CancelsTouchesInView == true)
    • 만약 CancelsTouchesInView == false 이면, Gesture Recognizer가 gesture를 인식해도 터치 이벤트들을 취소 시키지 않고 view에 터치 이벤트들을 전달한다.
    • https://developer.apple.com/documentation/uikit/uigesturerecognizer/1624218-cancelstouchesinview

 

'iOS > Swift' 카테고리의 다른 글

[iOS] Dark mode 사용하지 않기 (Light mode 강제 설정하기 )  (0) 2021.12.12
[iOS] Codable - JSON Encoding 과 Decoding 하기  (0) 2021.12.11
[iOS] Swift - enum (2)  (0) 2021.11.20
[iOS] Swift - enum (1)  (0) 2021.11.17
[iOS] CGAffineTransform - 뷰 객체의 이동, 회전, 크기 조절  (0) 2021.11.01
  1. 현상
  2. 원인
  3. 해결
'iOS/Swift' 카테고리의 다른 글
  • [iOS] Dark mode 사용하지 않기 (Light mode 강제 설정하기 )
  • [iOS] Codable - JSON Encoding 과 Decoding 하기
  • [iOS] Swift - enum (2)
  • [iOS] Swift - enum (1)
듀IT
듀IT
듀IT
듀 IT
듀IT
전체
오늘
어제
  • 분류 전체보기 (55)
    • iOS (50)
      • iOS 앱 개발 올인원 패키지 Online (34)
      • Swift (16)
    • 자격증 (0)
      • 정보처리기사 (0)
    • 컴퓨터공학 (4)
      • 운영체제 (3)
      • 네트워크 (1)
    • 프로젝트 (1)
      • 환경설정 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 패스트캠퍼스
  • closure
  • ios
  • iOS 앱 개발 올인원 패키지 Online
  • swift
  • UIImage
  • 상속
  • 생성자
  • ViewController
  • enum
  • Optional
  • 패캠챌린지
  • 열거형
  • structure
  • Convenience
  • 직장인자기계발
  • 패스트캠퍼스후기
  • UITableView
  • 구조체
  • 직장인인강

최근 댓글

최근 글

hELLO · Designed By 정상우.
듀IT
[iOS] UICollectionView의 didSelectItemAt 메소드가 작동하지 않을 때 (Tap Gesture Recognizer)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.