10

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

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

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

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

尽管如此,它还是妨碍了与它下面的对象进行交互。任何想法它可能是什么?

4

2 回答 2

24

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

- (NSView*)hitTest:(NSPoint)aPoint
{
    return nil;
}
于 2014-01-11T09:48:44.663 回答
0

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

在此处输入图像描述

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

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

于 2013-04-09T00:42:48.637 回答