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