NSTextField点击?

oly*_*ise 7 macos cocoa objective-c interface-builder

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

在IB中,我取消选中"已启用",并且我已选中"拒绝第一响应者"

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

[largeErrorText setEnabled:NO];
[largeErrorText setRefusesFirstResponder:YES];
Run Code Online (Sandbox Code Playgroud)

它仍然妨碍了与它下面的物体的互动.任何想法可能是什么?

Leo*_*rdo 23

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

- (NSView*)hitTest:(NSPoint)aPoint
{
    return nil;
}
Run Code Online (Sandbox Code Playgroud)


NSG*_*God 0

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

在此输入图像描述

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

此设计场景描述了一种称为“重叠同级视图”的情况。如果可能的话,我通常会尽力避免这种情况。如果不能,您可以通过确保NSTextField标签位于您希望与之交互的所有其他 UI 对象“后面”来获得所需的行为。您可以通过选择标签并选择“编辑器”>“排列”>“发送到底层”来完成此操作。这将确保按钮位于文本字段的前面,以便它可以正确拦截鼠标事件。