0

タッチイベントをすべてのサブビューにパススルーする最良の方法は何ですか?

ViewController -> ビュー -> (subview1, subview2)

サブビュー 1 とサブビュー 2 の両方がタッチ イベントに応答するようにします。

4

2 に答える 2

1

サブビューのタグを目立つタグと同じに設定します。次に、それらのタグを探してビューをツリー検索します。残念ながら、サブクラス化せずにこれを行う良い方法はありません。サブクラス化する場合は、ビューをサブクラス化し、タッチ時に同じサブクラスの他のすべてのビューがリッスンする NSNotification をスローします。

于 2012-11-28T03:28:27.570 に答える
1

親のタッチ ハンドラーでは、そのビューのサブビューを反復処理して、同じハンドラーを呼び出すことができます。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   for(UIView *subview in [self.view subviews]) {
       [subview touchesBegan:touches withEvent:event];
   }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
   for(UIView *subview in [self.view subviews]) {
       [subview touchesMoved:touches withEvent:event];
   }
}

または、特定のサブビューを識別する必要がある場合は、サブビューに整数のタグを割り当てて、後で識別することができます。

- (void)loadView {
   UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(10,10,10,10)];
   view1.tag = 100;
   [self.view addSubview:view1];

   UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(20,20,20,20)];
   view2.tag = 200;
   [self.view addSubview:view2];

}

その後、後でタッチ イベントによって呼び出される ViewController メソッドで

- (void)touchEventResponder {
   UIView *view1 = [self.view viewWithTag:100];
   // Do work with view1
   UIView *view2 = [self.view viewWithTag:200];
   // Do work with view2
}
于 2012-11-28T03:29:00.637 に答える