これはレスポンダー チェーンの基本的な誤解だと思います。iOS4 から変更されましたか? いくつかのサブビューを持つビューがあります。スーパービューには、サブビューを配置する以外の目的はなく、タッチの処理とは何の関係もありません。サブビューでタッチをリッスンしたいのですが、スーパービューがタッチ イベントをブロックしているようです。スーパービューがサブビューにタッチを渡したと思いましたか? これに関するいくつかの記事を読みましたが、頭がわかりません。いくつかの投稿では、スーパービューの userInteractionEnabled を NO に設定するとうまくいくことが示唆されているようですが、これを行ってもまだタッチが通らないようです。
意味がはっきりしない場合のために、簡略化したコードをいくつか示します。赤いビュー内をタップしても、NSLog はトリガーされません...
@implementation ViewController
@synthesize redView;
- (void)viewDidLoad
{
UIView *blueView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 400)];
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];
redView = [[UIView alloc]initWithFrame:CGRectMake(20, 20, 40, 40)];
redView.backgroundColor = [UIColor redColor];
[blueView addSubview:redView];
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
if (CGRectContainsPoint(redView.frame, touchPoint)) {
NSLog(@"red got touched");
}
}
@end