【发布时间】:2012-07-13 18:11:08
【问题描述】:
我有两个相互重叠的 NSView。一个 NSView 呈现一个带有行的表。单击一行时,另一个视图会显示在该视图的顶部。
现在的问题是,当我单击第二个视图上的一个区域时,在 NSView 下方有一行时,它会被单击。我怎样才能阻止它?
谢谢
【问题讨论】:
标签: objective-c macos cocoa nsview
我有两个相互重叠的 NSView。一个 NSView 呈现一个带有行的表。单击一行时,另一个视图会显示在该视图的顶部。
现在的问题是,当我单击第二个视图上的一个区域时,在 NSView 下方有一行时,它会被单击。我怎样才能阻止它?
谢谢
【问题讨论】:
标签: objective-c macos cocoa nsview
在您的顶级视图中,在该视图中实现 mouseDown:,并且不要调用 nextResponder 或在其中执行任何操作。
- (void)mouseDown:(NSEvent *)theEvent{
//Do nothing to not propagate the click event to descendant views
}
我的场景与 OP 完全相同,这对我来说是按预期工作的。感谢我找到的答案 here 导致我这样做。
【讨论】:
NSView 后面的任何操作(编辑文本、单击按钮等)。有没有办法完全阻止交互?
子类化并在视图中实现acceptsFirstMouse,返回YES。另外,在该视图中将acceptsTouchEvents 设置为YES。
【讨论】:
您可以在显示时在顶视图中启用触摸和鼠标事件:
topView.acceptsTouchEvents = YES;
topView.acceptsFirstMouse = YES;
编辑:注释是正确的,acceptsFirstMouse 不是属性,必须在子类中更新。
【讨论】:
acceptsFirstMouse 中继承并返回 YES,因为它不是 NSView 的属性。