我确定这是对响应者链的基本误解 - 自 iOS4 以来它是否发生了变化?我有一些子视图的视图。超级视图除了定位子视图之外没有其他用途,并且与处理触摸无关。我希望子视图监听触摸,但超级视图似乎阻止了触摸事件。我认为superviews将触摸传递给subviews?我已经阅读了几篇关于此的帖子,但我无法理解它。几篇文章似乎建议将超级视图的 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