有没有办法专注于NSBox并为该盒子绘制聚焦环?
我以为[box drawFocusRingMask];可能是类似的东西,但没有任何反应。
单击按钮后,我只需要在框上有一个对焦环即可。
提前致谢。
最佳答案
假设您要部署到10.7或更高版本,则可以创建一个自定义视图类(可能是NSBox的子类),并使其覆盖以下方法:
- (BOOL)acceptsFirstResponder {
return YES;
}
- (void)drawFocusRingMask {
NSRectFill([self bounds]);
}
- (NSRect)focusRingMaskBounds {
return [self bounds];
}
如果将NSBox子类化,则可以根据需要使用
-borderRect
代替bounds
。编辑:您可以使用聚焦环绘图之前的10.7样式。您可能会执行以下操作:
-(void)drawRect:(NSRect)rect
{
NSResponder* fr = [[self window] firstResponder];
if ([fr isKindOfClass:[NSView class]] && [(NSView*)fr isDescendantOf:self])
{
[NSGraphicsContext saveGraphicsState];
NSSetFocusRingStyle(NSFocusRingOnly);
[[NSBezierPath bezierPathWithRect:NSInsetRect([self bounds],4,4)] fill];
[NSGraphicsContext restoreGraphicsState];
}
// ... normal drawing, possibly invoking super ...
}
该视图还必须监视第一响应者中的更改,并对其自身调用
-setKeyboardFocusRingNeedsDisplayInRect:
。此外,在使用-setFocusRingType:
进行安装时,可能需要自行调用NSFocusRingTypeExterior
,尽管这可能是默认设置,具体取决于超类。