1. ホーム
  2. アイオス

[解決済み】UITapGestureRecognizerがUITableViewのdidSelectRowAtIndexPathを破る

2022-04-06 15:09:48

質問

キーボードが表示されたときにテキストフィールドを上にスクロールさせる機能を自作しています。テキストフィールドから離れた場所でタップしてキーボードを解除するために UITapGestureRecognizer で、タップしたときにテキストフィールドのファーストレスポンダを辞任させる処理を行います。

今度は、テキストフィールドのオートコンプリートで UITableView のすぐ下にあり、ユーザーがテキストを入力すると、そこに項目が入力されます。

しかし、自動完成したテーブルの中の項目を一つ選択すると didSelectRowAtIndexPath が呼び出されない。代わりに、タップジェスチャーの認識装置が呼び出され、ファーストレスポンダーを辞任しているだけのようです。

タップジェスチャーレコグナイザーにタップメッセージを渡し続けるように指示する方法があると思います。 UITableView しかし、それが何なのかがわかりません。何か助けがあれば、とてもありがたいです。

解決方法は?

ジェスチャー認識ソフトのドキュメントを検索して、ようやく見つけました。

解決策は UIGestureRecognizerDelegate を追加し、以下のようにしました。

#pragma mark UIGestureRecognizerDelegate methods
    
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
  if ([touch.view isDescendantOfView:autocompleteTableView]) {
            
    // Don't let selections of auto-complete entries fire the 
    // gesture recognizer
    return NO;
  }
        
  return YES;
}

これで対処できました。これが他の人にも役立つといいのですが。