Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SwiftGen
- 2018 KAKAO BLIND RECRUITMENT
- JSONSerialization
- 위클리챌린지
- cocoapods
- CustomCode
- 티스토리챌린지
- JSON
- Xcode
- programmers
- parse
- Decodable
- swift
- pbxgroup
- issecuretextentry
- dynamic height
- pbxfilesystemsynchronizedrootgroup
- JSONParser
- storybaord
- UITableView
- 정보처리기사
- RealmSwift
- Custom PageViewController
- Codable
- Pod
- PageViewController
- 프로그래머스
- IOS
- 정보처리기사 실기 요약본
- 정보처리기사 실기
Archives
- Today
- Total
iOS 개발일기
[Swift] 'didSelectItemAt' 함수가 호출되지 않는 이유 본문
func tableView(
_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath
) { ... }
func collectionView(
_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath
) { ... }
위 두 함수가 호출되지 않는 이유
1. delegate를 설정해주지 않았을 경우
tableView.delegate = self
collectionView.delegate = self
위 같은 방법은 단순한 방법이라 실수를 했을 경우가 많을 것 같네요.
2. tableView 또는 collectionView의 상위 뷰가 'tapGesture'를 가지고 있는 경우'
이 경우는 좀 특별한 상황인 것 같네요.
'호출이 안된다'가 아니라 두 손가락으로 탭하거나 길게 누르거나 혹은 PanGesture가 호출될때 'didSelectItemAt' 함수가 호출이 되더라구요.
이게 왜 이러나 싶어서 엄청 찾아봤습니다.
이 글에서 답을 찾아버렸지 뭡니까
만약 UITableView 또는 UICollectionView 가 하위뷰로 포함이 되어있고,
상위 뷰에 UITapGestureRecognizer 가 추가된 상태일 경우에는 'didSelectItemAt' 의 함수가 한 손가락으로 클릭했을 경우 호출되지 않는다라고 하더라고요.
class ViewController: UIViewController {
lazy var tableView: UITableView = { ... }
override
func viewDidLoad() {
super.viewDidLoad()
//tableView를 포함한 상위 뷰에서 'tapGesture'가 추가된 경우
view.addGestureRecognizer(
UITapGestureRecognizer(
target: self,
action: #selector(dismissKeyboard)
)
)
//tableView 화면구성
view.addSubview(tableView)
...
}
@objc
private func dismissKeyboard() {
...
}
}
위와 같은 경우 처럼요.
이런 경우 'cancelsTouchesInView' 속성을 false로 설정해주시면 tableView의 'didSelectItemAt' 함수를 한 손가락 터치로 호출 할 수 있게 됩니다.
let tap = UITapGestureRecognizer(
target: self,
action: #selector(dismissKeyboard)
)
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
아직 이 외 다른 함수들에 대해서도 좀 더 알아보고 공부해야되겠네요.
'iOS > Swift' 카테고리의 다른 글
[Swift] 화면 캡처 감지 및 방지 방법 (0) | 2024.12.31 |
---|---|
[Swift] UITableView Dynamic Height (0) | 2024.12.26 |
[Swift] Custom PageViewController (0) | 2022.03.22 |
[Swift] JSONParser - JSONSerialization (0) | 2022.03.16 |
[Swift] JSONParser - Decodable(2) (0) | 2022.03.15 |