0

これが私の状況です。ナビゲーションコントローラーにUISearchBarとUITableViewがあります。ユーザーが検索バーをタップすると、キーボードがポップアップするため、ユーザーは次のように検索文字列を入力できます。

ここに画像の説明を入力してください

しかし、キーボードがリストを覆い隠しているので、ユーザーがテーブルをタップするとキーボードが消えて、驚くほどの難しさを感じるようにしたいと思います。

  1. TapGestureRecognizerを使用すると、ユーザーがどこかをタップしたかどうかはわかりますが、テーブルをタップすると、通常のテーブルイベントは機能しません。
  2. 他のことを試してみましたが(今は思い出せません)、ユーザーがテーブルをタップするとイベントが発生しましたが、一般的なタップアンドドラッグではないため、十分ではありません。

私が欲しいのは、テーブル自体のTouchDownInsideイベントのようなものなので、テーブルが何らかのユーザー入力を受け取ったときにキーボードを閉じることができますが、これは存在しないようです。これを行うための最良の方法は何ですか?

4

2 に答える 2

1

簡単な解決策は、UITableViewがスクロールしているときにキャッチすることです。UITableViewはUIScrollViewを拡張するため、scrollViewDidScroll:を探すことができます。検索バーに最初のレスポンダーを辞任させて、キーボードをなくします。同じことがscrollViewWillBeginDragging:メソッドでも実行できます。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [searchBar resignFirstResponder];
}

UITableViewのデリゲートとして動作するため、UITableViewDelegateにこれを実装します

詳細については、

http://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/

于 2013-01-24T16:03:01.600 に答える
1

TapGestureRecognizer を使用すると、ユーザーがどこかをタップしたかどうかがわかりますが、テーブルをタップすると、通常のテーブル イベントは機能しません。

cancelsTouchesInViewタップ ジェスチャ認識エンジンを NO に設定してみてください。

tapGestureRecognizer.cancelsTouchesInView = NO;

これにより、ジェスチャが認識された場合でも、タッチをビューに転送できるようになります。

ジェスチャ認識エンジンのデリゲートと次のメソッドを定義する必要がある場合もあります。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{
    return YES;
}

これは、テーブルがジェスチャ認識機能を介してジェスチャも管理し、両方が同時に機能できることを前提としています。

于 2013-01-24T16:05:44.777 に答える