【问题标题】:How to disable Click through to a NSView behind another NSView如何禁用点击到另一个 NSView 后面的 NSView
【发布时间】:2012-07-13 18:11:08
【问题描述】:

我有两个相互重叠的 NSView。一个 NSView 呈现一个带有行的表。单击一行时,另一个视图会显示在该视图的顶部。

现在的问题是,当我单击第二个视图上的一个区域时,在 NSView 下方有一行时,它会被单击。我怎样才能阻止它?

谢谢

【问题讨论】:

    标签: objective-c macos cocoa nsview


    【解决方案1】:

    在您的顶级视图中,在该视图中实现 mouseDown:,并且不要调用 nextResponder 或在其中执行任何操作。

    - (void)mouseDown:(NSEvent *)theEvent{
        //Do nothing to not propagate the click event to descendant views   
    }
    

    我的场景与 OP 完全相同,这对我来说是按预期工作的。感谢我找到的答案 here 导致我这样做。

    【讨论】:

    • 这行得通,但我注意到鼠标光标仍然会改变以显示顶部NSView 后面的任何操作(编辑文本、单击按钮等)。有没有办法完全阻止交互?
    • 您找到解决方案了吗?
    【解决方案2】:

    子类化并在视图中实现acceptsFirstMouse,返回YES。另外,在该视图中将acceptsTouchEvents 设置为YES

    【讨论】:

      【解决方案3】:

      您可以在显示时在顶视图中启用触摸和鼠标事件:

      topView.acceptsTouchEvents = YES;
      topView.acceptsFirstMouse = YES;
      

      编辑:注释是正确的,acceptsFirstMouse 不是属性,必须在子类中更新。

      【讨论】:

      • 我刚刚尝试过,但没有成功。我在 NSView 上找不到acceptFirstMouse 属性。
      • @PeterDeWeese,看来您必须在 acceptsFirstMouse 中继承并返回 YES,因为它不是 NSView 的属性。
      • 不知道这个家伙,但我通过改变设计解决了我的问题。谢谢
      • @Leo,如果答案不起作用,你为什么要接受?
      • 我会删除我的答案以减少混淆......实际上我不能,因为它被接受了。我确实添加了第二个。随意充实。
      猜你喜欢
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多