背景Viewにキーボードを隠すジェスチャーアクションを設定したら
UICollectionViewCellのタップアクションが効かなくなる問題が起きた。

現在のコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)viewDidLoad {
[super viewDidLoad];

// 背景をクリックしたら、キーボードを隠す
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeSoftKeyboard)];
[self.view addGestureRecognizer:gestureRecognizer];
}

- (void)closeSoftKeyboard {
// キーボードを隠す処理
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
// cellをタップした場合
}

原因は、タップアクションが呼ばれる前にジェスチャーアクションが先に呼ばれるためだった。
解決するには、ジェスチャーアクションを先に呼ぶ設定のcancelsTouchesInViewをNOにすれば解決できた

cancelsTouchesInViewを追加したコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- (void)viewDidLoad {
[super viewDidLoad];

// 背景をクリックしたら、キーボードを隠す
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeSoftKeyboard)];
gestureRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:gestureRecognizer];
}

- (void)closeSoftKeyboard {
// キーボードを隠す処理
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
// cellをタップした場合
}

X