[Tips] NSViewを重ねたときのmouseDownイベント
レスポンダチェーンとかをちゃんと理解していると,明白なことなのかもしれないが,こないだこれにダダはまりしたので,メモっとく.
あるビュー上にサブビューをおく.
// Create main view id mainView = [[MyView1 alloc] initWithFrame:[window bounds] withName:@"main view"]; [window setContentView:mainView]; // Create sub view in main view id subview = [[MyView2 alloc] initWithFrame:CGRectMake( 20, 20, 100, 100) withName:@"sub view"]; [mainView addSubview:subview];
subview上でマウスをクリックすると,MyView2のmouseDownが実行される.
subviewの下にあるmainviewには,mouseDownのイベントは届かない.
- (void) mouseDown:(NSEvent*)event { NSLog( @"click - %@", name_ ); [super mouseDown:event]; }
[super mouseDown:event]をmouseDownイベントで実装しておくと,mainviewにもmouseDownイベントが届く.
順序は,subviewー>mainviewの順でmosueDownイベントが発生する様子.