UITapGestureRecognizerとUICollectionViewが競合した場合
Post on
背景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をタップした場合 }
|