首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSBox焦点环?

NSBox焦点环?
EN

Stack Overflow用户
提问于 2012-04-07 15:22:14
回答 1查看 2K关注 0票数 1

有没有一种方法可以将焦点集中在NSBox上,并为该框绘制对焦环?我以为box drawFocusRingMask;可能是类似的东西,但什么也没发生。我只需要一个框有一个焦点环在它周围时,一个按钮已被点击。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-07 17:20:45

假设您正在部署到10.7或更高版本,您可以创建一个自定义视图类(可能是NSBox的子类),并让它覆盖以下方法:

代码语言:javascript
复制
- (BOOL)acceptsFirstResponder {
    return YES;
}
- (void)drawFocusRingMask {
    NSRectFill([self bounds]);
}
- (NSRect)focusRingMaskBounds {
    return [self bounds];
}

如果是NSBox的子类化,如果您愿意,可以使用-borderRect代替bounds

编辑:您可以使用10.7版本之前风格的焦点环图。您可能会这样做:

代码语言:javascript
复制
-(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 ...
}

视图还必须监视first responder中的更改,并在其自身上调用-setKeyboardFocusRingNeedsDisplayInRect:。此外,在使用NSFocusRingTypeExterior进行设置期间,它可能需要调用自身的-setFocusRingType:,尽管这可能是默认设置,具体取决于超类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10052628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档