1

NSBox に焦点を合わせて、そのボックスのフォーカス リングを描画する方法はありますか? [box drawFocusRingMask] と思いました。似たようなものかもしれませんが、何も起こりません。ボタンがクリックされたときにボックスの周りにフォーカス リングを配置する必要があるだけです。

前もって感謝します。

4

1 に答える 1

1

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

于 2012-04-07T09:20:45.020 に答える