NSTextField
我的OS X 应用程序中有一个覆盖大错误消息的静态信息。我试图让它允许用户单击它下面的控件。
在 IB 中,我取消选中“启用”并选中“拒绝第一响应者”
我也在代码中完成了它,因为那不起作用:
[largeErrorText setEnabled:NO];
[largeErrorText setRefusesFirstResponder:YES];
尽管如此,它还是妨碍了与它下面的对象进行交互。任何想法它可能是什么?
NSTextField
我的OS X 应用程序中有一个覆盖大错误消息的静态信息。我试图让它允许用户单击它下面的控件。
在 IB 中,我取消选中“启用”并选中“拒绝第一响应者”
我也在代码中完成了它,因为那不起作用:
[largeErrorText setEnabled:NO];
[largeErrorText setRefusesFirstResponder:YES];
尽管如此,它还是妨碍了与它下面的对象进行交互。任何想法它可能是什么?
我发现使对象对单击透明的唯一方法是对该对象进行子类化(在您的情况下为 NSTextField)并覆盖返回 nil 的 hitTest 方法。这样 NSTextField 将不会响应单击,因此下面的 NSView 将响应单击。
- (NSView*)hitTest:(NSPoint)aPoint
{
return nil;
}
我假设您正在描述如下图所示的场景:
内部红色矩形是NSTextField
标签的框架轮廓,您是说即使您禁用了文本字段并设置了拒绝第一响应者,您的点击也不会进入NSButton
?
此设计方案描述了一种称为“重叠同级视图”的条件。如果可能的话,我通常会尽量避免这种情况。如果不能,您可以通过确保NSTextField
标签位于您希望能够与之交互的所有其他 UI 对象的“后面”来获得所需的行为。您可以通过选择标签并选择 Editor > Arrange > Send to Back 来做到这一点。这将确保按钮位于文本字段的前面,以便它可以正确拦截鼠标事件。