有没有办法专注于NSBox并绘制该框的对焦环? 我以为[box drawFocusRingMask];可能是类似的东西,但没有任何反应。 我只需要一个盒子在按钮被点击时在其周围有一个对焦环。NSBox聚焦环?
在此先感谢。
有没有办法专注于NSBox并绘制该框的对焦环? 我以为[box drawFocusRingMask];可能是类似的东西,但没有任何反应。 我只需要一个盒子在按钮被点击时在其周围有一个对焦环。NSBox聚焦环?
在此先感谢。
假设你部署到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:
。另外,可能需要在NSFocusRingTypeExterior
的设置过程中自行拨打-setFocusRingType:
,虽然这可能是默认设置,具体取决于超类。
感谢您的回复。它现在创建一个聚焦环,但它只在点击nsbox的标题时创建。但是,我希望在点击nsbox内的任何位置时显示它(我不会有标题)。如果我调用drawFocusRingMask,它会用黑色填充整个nsbox。有没有一种方法可以显示对焦环,而不仅仅是当标题被点击时,但盒子内的任何位置? – Dennis 2012-04-07 22:13:56
这不是聚焦环的工作原理。特别是在10.7及更高版本中,AppKit会自动处理更多的对焦环内容。也许你应该停止思考一个聚焦环,并创建一个自定义视图,当第一个响应者是其后代视图时,以不同的方式绘制自己的视图(以自定义的方式)。 – 2012-04-08 07:25:34
我想到了一种使用10.7之前的对焦环画技术并编辑了我的答案的方法。 – 2012-04-08 07:39:24
NSBox对焦点有什么意义?它将会收到什么关键事件?你可以通过继承NSBox和覆盖'-acceptsFirstResponder'来返回YES来实现某些功能,但是你必须对接收到的关键事件做些什么。 – 2012-04-07 08:24:13
@KenThomases我打算为这个盒子画焦点环时说出它的焦点。我只需要一个盒子或其他东西,当我需要时可以在边框上画一个对焦环。有没有简单的方法来做到这一点?我尝试了继承NSBox并覆盖acceptFirstResponder,但没有任何效果。 – Dennis 2012-04-07 08:39:42