NSView をサブクラス化し、次を使用して NSTrackingArea を作成しました。
-(void)setUpTrackingArea
{
if(trackingArea != nil)
{
[self removeTrackingArea:trackingArea];
}
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingEnabledDuringMouseDrag);
trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] options:opts owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
NSLog(@"update tracking area %@", trackingArea);
NSPoint mouseLocation = [[self window] mouseLocationOutsideOfEventStream];
mouseLocation = [self convertPoint: mouseLocation fromView: nil];
if (NSPointInRect(mouseLocation, [self bounds]))
{
[self mouseEntered: nil];
}
else
{
[self mouseExited: nil];
}
}
私もオーバーライドしています:
- (void)mouseEntered:(NSEvent *)theEvent
- (void)mouseExited:(NSEvent *)theEvent
次に呼び出すハイライトプロパティを設定する
[self setNeedsDisplay:YES];
drawrect を呼び出して、メニューに期待されるようにメニュー ビューを強調表示します。
問題は、マウスが離れた後に一部のカスタム ビューが強調表示されたまま、マウス終了イベントが常に発生するようには見えないことです。
私が間違っていることは何ですか?
この問題を提示するデモ プロジェクトを作成しました。
https://github.com/antokne/APGCustomMenuItemViewを参照してください
タンツ。