일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- SwiftUI
- Android
- ios
- dfs
- error
- 공부
- greedy algorithm
- 백준온라인저지
- 안드로이드 공부
- Clean Architecture
- Autolayout
- BFS
- 그리디 알고리즘
- Swift공부
- 백준 온라인 저지
- 오토레이아웃
- iOS개발
- swift
- Kotlin
- 파이썬
- 알고리즘
- 알고리즘 공부
- 앱개발
- Python
- 정렬
- Algorithm
- UIKit
- Level 1
- 파이썬 풀이
- Today
- Total
Tori의 개발 공부
CollectionView Cell 클릭이 안될때 대체 방법 본문
프로젝트 도중 collectionview의 didselectItemAt 함수가 호출되지 않는 문제가 발생하였다.
그래서 여러 가지 시도를 해봤는데 계속해서 되지 않아
didselectItemAt 함수 대신 해 사용할 수 있는 방법을 찾아 정리해볼까 한다.
시도해 봤던 방법
이미지 뷰가 셀 전체를 차지하고 있어 계층 구조 시 셀이 이미지 뷰에 덮어지면서 무언가 꼬여 해당 함수가 호출이 되지 않는 건 아닐까 의심되었다.
isUserInteractionEnabled 속성을 줘봄 ⇒ 실패
isUserInteractionEnabled
뷰에 대한 터치, 누르기, 키보드 및 포커스 이벤트가 무시되고 이벤트 큐에서 제거됨. 기본값은 true
그렇다면 나의 가정이 잘못된 것인지 확인해보기 위해
이미지에 여백을 줘 해당 여백을 클릭했을 때 함수가 호출되는지 확인해 보았다.
하지만 함수는 그래도 호출되지 않았다.
이미지 때문에 꼬였을 거 같다는 내 예상은 틀렸었다.
UITapGestureRecognizer로 didselectItemAt 대신하기
UITapGestureRecognizer
단일 또는 다중 탭을 해석하는 개별 제스처 인식기
셀을 생성할 때 셀에 addGestureRecognizer를 해준 뒤 탭 했을 때의 동작을 selector로 전달해 준다.
선택한 셀마다 각각의 데이터를 넘겨주기 위해서는 인덱스패치 계산이 필요하다.
didSelectedItemAt은 자동으로 계산해 주지만 UITapGestureRecognizer는 직접 알려줘야 한다.
@objc func tappedCell(_ sender: UITapGestureRecognizer) {
let point = sender.location(in: collectionView)
if let indexPath = collectionView.indexPathForItem(at: point) {
print(indexPath.row)
let viewController = UserDetailViewController()
navigationController?.pushViewController(viewController, animated: true)
}
}
UITapGestureRecognizer의 location함수로 제스처의 위치값을 저장한다.
collectionView.indexPathForItem(at: ) 함수를 통해 해당 좌표의 인덱스패치 값을 구할 수 있다.
func indexPathForItem(at point: CGPoint) -> IndexPath?
컬렉션 뷰의 지정된 지점에 있는 항목의 인덱스 경로를 가져옴.
결론
나중에 확인해 보니 베이스뷰컨트롤러와의 충돌로 didselectItemAt 함수가 호출하지 않는 것이었다.
충돌 해결 후 다시 함수를 작성해 보니 잘 호출되었다.
당연히 충돌되는 부분을 찾아 수정 후 함수를 작성하는 것이 좋겠지만
임시적인 방편으로 didselectItemAt 대신에 UITapGestureRecognizer를 사용해서 didselectItemAt처럼 사용할 수 있다는 것을 알았다.
'IOS App Programming > 트러블 슈팅' 카테고리의 다른 글
[Project / 협업] Product Language 정립하기 (0) | 2024.07.28 |
---|---|
[iOS / Fastlane ] Fastlane을 통해 설정 및 CD 환경 구축 시 마주쳤던 에러 모음 (0) | 2024.07.23 |
[iOS/ UIKit] UIFont Custom - Variable Font와 마주친 문제 (0) | 2024.07.03 |
[SwiftUI/Realm] Delete 시 invalidated 오류 해결 방안 (2) | 2024.04.03 |
네비게이션 스택과 모달 시트에서의 뷰 컨트롤러 라이프 사이 (1) | 2024.01.11 |