【问题标题】:NSTextField click-through?NSTextField 点击率?
【发布时间】:2013-03-31 05:50:08
【问题描述】:

我有一个静态 NSTextField,它覆盖了我的 OS X 应用程序中的一条大错误消息。我试图让它允许用户点击它下面的控件。

在 IB 中,我取消选中“启用”并选中“拒绝第一响应者”

我也在代码中完成了它,因为那不起作用:

[largeErrorText setEnabled:NO];
[largeErrorText setRefusesFirstResponder:YES];

不过,它还是妨碍了与它下面的对象进行交互。有什么想法吗?

【问题讨论】:

标签: objective-c macos cocoa interface-builder


【解决方案1】:

我发现使对象对点击透明的唯一方法是对该对象进行子类化(在您的情况下为 NSTextField)并覆盖返回 nil 的 hitTest 方法。这样 NSTextField 不会响应点击,所以下面的 NSView 会响应点击。

- (NSView*)hitTest:(NSPoint)aPoint
{
    return nil;
}

【讨论】:

    【解决方案2】:

    我假设您正在描述如下图所示的场景:

    内部的红色矩形是NSTextField 标签的框架轮廓,您是说即使您禁用了文本字段并设置了拒绝第一响应者,您的点击也不会转到NSButton ?

    此设计方案描述了一种称为“重叠同级视图”的条件。如果可能的话,我通常会尽量避免这种情况。如果不能,您可以通过确保 NSTextField 标签位于您希望能够与之交互的所有其他 UI 对象的“后面”来获得所需的行为。您可以通过选择标签并选择 Editor > Arrange > Send to Back 来做到这一点。这将确保按钮位于文本字段的前面,以便它可以正确拦截鼠标事件。

    【讨论】:

    • 很棒的评论,但没有回答问题。谢谢。
    猜你喜欢
    • 2012-12-31
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多