NSTextField点击?

时间:2013-04-09 00:00:45

标签: objective-c macos cocoa interface-builder

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

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

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

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

但是,它正在妨碍与其下方的对象进行交互。任何想法可能是什么?

2 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:0)

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

enter image description here

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

此设计方案描述了一种称为“重叠兄弟视图”的条件。如果可能的话,我通常会尽量避免这种情况。如果不能,则可以确保NSButton标签位于您希望能够与之交互的所有其他UI对象的“后面”,从而获得所需的行为。您可以通过选择标签并选择编辑器>来实现。安排>发送回。这将确保按钮位于文本字段的前面,以便它可以正确拦截鼠标事件。