2012-02-19 7 views
0

私はUITableViewとUINavigationControllerを持っていますが、2つのクリックを区別したいと思います:1)通常のクリックで行が選択され、2)クリックが画面上の他の場所でUINavigationController)を呼び出します。私はこのコードを書いた:UITableViewのシングルクリック

singleTap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self action:@selector(singleTapHandler:)]; 
singleTap.numberOfTapsRequired = 1; 

しかし、この問題は、行を選択する通常のクリックを無効にすることです。

+0

"画面上のその他の情報"が意味することは明確ではありません。テーブルビューはナビゲーションバーの下の画面全体を占有していますか?あなたは、あなたのタップレコグナイザをトリガする*と*の両方を選択するために、テーブルビューの行に触れたいと思っていますか? –

+0

テーブルビューは、ナビゲーションバーの下の画面全体を占有します。私は行を選択するためにテーブルビューの行に触れるだけです。他の場所のタッチは、タップレコグナイザをトリガするだけです。そして、ナビゲーションバーのボタンを押すと、ボタンを押すだけでトリガされます。それは明確ですか? – user1120008

+0

タップを認識したい画面の唯一の部分のように聞こえるのは、ボタンの外側のナビゲーションバーにあります。正しい? –

答えて

1

タップレコグナイザは、UIWindow自体またはウィンドウの唯一のサブビューに置いているとします。タップ認識プログラムに代理人を指定する必要があり、その代理人はgestureRecognizer:shouldReceiveTouch:を実装する必要があります。

この方法では、タッチがボタンにある場合、またはタッチがテーブルビューセルにある場合はNOを返し、それ以外の場合はYESを返します。タッチが着陸したビューから始めて、これらのクラスのいずれかを探して、ビュー階層を上っていく必要があります。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    for (UIView *view = touch.view; view; view = view.superview) { 
     if ([view isKindOfClass:[UIButton class]]) 
      return NO; 
     if ([view isKindOfClass:[UITableViewCell class]]) 
      return NO; 
    } 
    return YES; 
} 
関連する問題