7

同じクラスのランダムな数のカスタム UIView を作成し、それらを UIViewController のビューに追加しています。私はそれらに UITapGestureRecognizer を割り当てていますが、排他的なタッチを機能させることができないようです:

for (int i = 0; i <= n; i++) {
   ICCatalogProductView *catalogProductView;
   catalogProductView = [[ICCatalogProductView alloc] init];
   [self.view addSubview:catalogProductView]
   UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(testTouch)];
   [catalogProductView addGestureRecognizer:tapGesture];
   [catalogProductView setExclusiveTouch:YES];
}

UIViews を同時にタップすると、メソッドが 2 回呼び出されます (必要な動作ではありません)。これを解決するエレガントな方法、またはまったく方法はありますか?

4

1 に答える 1

1

アップルのドキュメントから:

ExclusiveTouch は、排他的なタッチ ビューにアクティブなタッチがある間だけ、他のビューでのタッチを防ぎます。つまり、排他的なタッチ ビューに指を置いた場合、最初の指を離すまで、他のビューではタッチが開始されません。現在、exclusiveTouch ビューにタッチがない場合でも、他のビューでのタッチの開始は妨げられません。

このビューを画面上でタッチを受け取ることができる唯一のものにするには、残りのタッチをキャッチするために他のすべての上に別のビューを追加するか、階層内のどこか (または UIWindow 自体) のビューをサブクラス化する必要があります。 hitTest:withEvent: をオーバーライドして、表示されている場合は常にテキスト ビューを返すか、テキスト ビューにないタッチの場合は nil を返します。

は、ビューの外にあるものに触れている場合ではなく、1 つのビューで排他的に設定されていることを意味します。

于 2013-07-25T11:53:30.647 に答える