gpt4 book ai didi

objective-c - 使用自定义 View 突出显示 NSMenuItem?

转载 作者:太空狗 更新时间:2023-10-30 03:15:00 25 4
gpt4 key购买 nike

我创建了一个简单的 NSStatusBar 并将 NSMenu 设置为菜单。我还在这个菜单中添加了一些 NSMenuItems,它们工作正常(包括选择器和突出显示)但是一旦我添加自定义 View (setView:) 就不会出现突出显示。

CustomMenuItem *menuItem = [[CustomMenuItem alloc] initWithTitle:@"" action:@selector(openPreferences:) keyEquivalent:@""];
[menuItem foo];
[menuItem setTarget:self];
[statusMenu insertItem:menuItem atIndex:0];
[menuItem release];

我的 foo 方法是:

- (void)foo {
NSView *view = [[NSView alloc] initWithFrame:CGRectMake(5, 10, 100, 20)];
[self setView:view];
}

如果我删除 setView 方法,它将突出显示。

我搜索了又搜索,找不到实现/启用它的方法。

编辑

我在我的 NSView 子类中按照这个问题中的代码实现了突出显示:

An NSMenuItem's view (instance of an NSView subclass) isn't highlighting on hover

#define menuItem ([self enclosingMenuItem])

- (void) drawRect: (NSRect) rect {
BOOL isHighlighted = [menuItem isHighlighted];
if (isHighlighted) {
[[NSColor selectedMenuItemColor] set];
[NSBezierPath fillRect:rect];
} else {
[super drawRect: rect];
}
}

最佳答案

下面是上面的一个不太冗长的版本。它对我来说效果很好。 (backgroundColour 是一个 ivar。)

- (void)drawRect:(NSRect)rect
{
if ([[self enclosingMenuItem] isHighlighted]) {
[[NSColor selectedMenuItemColor] set];
} else if (backgroundColour) {
[backgroundColour set];
}
NSRectFill(rect);
}

关于objective-c - 使用自定义 View 突出显示 NSMenuItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com