NSButton と NSButtonCell をサブクラス化し、図面を変更しました。これで、ボタンにフォーカス リングが表示されなくなりました。カスタム ボタンにカスタム カラーでフォーカス リングを描画する方法を探しています。
質問が更新されました
NSButton と NSButtonCell をサブクラス化し、図面を変更しました。これで、ボタンにフォーカス リングが表示されなくなりました。カスタム ボタンにカスタム カラーでフォーカス リングを描画する方法を探しています。
質問が更新されました
フォーカス リングを自分で描画する方法はわかりませんが (カスタム カラーを実行します)、カスタム ボタン セルにフォーカス リングを描画させるには、通常、次のようにfocusRingMaskBoundsForFrame:inView:をオーバーライドするだけで済みます。
- (NSRect)focusRingMaskBoundsForFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
return cellFrame;
}
それでも希望どおりの結果が得られない場合は、drawFocusRingMaskWithFrame:inView:を実装してマスクを追加で提供する必要がある場合があります。この方法では、基本的にフォーカス リングを追加する必要があるものを描画するだけです。Cocoa が残りの作業を行います。
これらの方法は Mac OS X 10.7 Lion 以降でのみ機能することに注意してください。ただし、これは Apple が現在行うべきだと言っている方法です。
カスタム ボタン クラスにトラッキング エリアを追加すると、ボタン フォーカスをカスタマイズできます。
-(void)awakeFromNib{
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways);
NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:self.frame options:opts owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
}
これで、次の機能でカスタマイズを行うことができます。
- (void) mouseEntered:(NSEvent*)event{
//Add Custom Focus Ring
}
- (void) mouseExited:(NSEvent*)event{
//Remove Custom Focus Ring
}