3

には 2 つのカスタム コントロールがUIViewあります。1 つは現在人気のあるスライディング メニュー (NavBarビュー スライドで指を右にスライドさせたとき) で、もう 1 つはDMSlidingTableViewCellという名前のコントロールからのUITableViewCellカスタムです(のようにTwitterアプリ - 左側のセルをスライドすると、いくつかのボタンなどが表示されます)。TableViewCell

それらは問題なく動作しますが、ジェスチャー認識機能を UITableView 全体に追加しようとすると、ビュー全体が領域になりUIGestureRecognizer(移動するとビューを右に移動できます)、ジェスチャー認識機能が何らかの形で競合します。

ここでの理由は何ですか?

4

2 に答える 2

6

2 つのスワイプ ジェスチャ レコグナイザーがそのコンテキストで連携できるとあなたが考える方法については明確ではありませんが、

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

デリゲート メソッド

2 つのジェスチャがあるため、2 つのデリゲート (概念的には、同じメソッドで実装されます) があることに注意してください。したがって、1 つのジェスチャ (最初の引数) が常に NO を返し、もう 1 つのジェスチャが YES を返すようにして、2 つのジェスチャを作成できるかどうかを確認できます。レコグナイザーは満足のいく方法で連携します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

    if ([gestureRecognizer.view isKindOfClass:[UITableView class]]) {
       ...
    } else {
       ...
    }
}

これはあなたのケースでうまくいくはずの単なる例です(ただし、構文を確認してください)が、クラスのプロパティに2つのレコグナイザーを保存することもできるので、どちらがどちらであるかがわかります。

于 2013-01-15T12:44:58.227 に答える
5

UITableView で UIGestureRecognizer を使用すると、u.Final のような同じ問題に遭遇しました。これにより、UIGestureRecognizer の「cancelsTouchesInView」プロパティが見つかりまし

  UIGestureRecognizer* tapGesture = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
  **tapGesture.cancelsTouchesInView = NO;**//pass touch event to others

よろしくお願いします!</p>

于 2015-08-15T07:12:54.917 に答える