gpt4 book ai didi

objective-c - NSStatusItem 的自定义 NSView 类中的 NSMenu 未出现在状态栏底部

转载 作者:行者123 更新时间:2023-12-03 17:42:17 30 4
gpt4 key购买 nike

我创建了一个自定义 View 类,因为我想要一个可以将项目拖动到的状态项目。

这是 View 的定义:

@interface DragStatusView : NSImageView <NSMenuDelegate>{
BOOL highlight;
}
@end

在我的 ApplicationDelegate.m 中,我实例化了一个 NSStatusItem 和一个 DragStatusView 实例。我在 DragStatusView 上设置图像,并将其菜单设置为包含一些 NSMenuItems 的 NSMenu 实例。

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
// Install icon into the menu bar
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];

NSImage *statusImage = [NSImage imageNamed:@"Status"];
[statusItem setImage:statusImage];




[menuItem setTitle:NSLocalizedString(@"Special Status", @"imgur menu item text")];
CGFloat itemHeight = [[NSStatusBar systemStatusBar] thickness];
NSRect itemRect = NSMakeRect(0.0, 0.0, NSSquareStatusItemLength, itemHeight);

DragStatusView* dragView = [[DragStatusView alloc] initWithFrame:itemRect];
[dragView retain];

[dragView setImage:statusImage];
[dragView setMenu:menu];

[statusItem setHighlightMode:YES];
[statusItem setView:dragView];
}

下面是 DragStatusView Controller 中触发菜单弹出的方法:

- (void)mouseDown:(NSEvent *)event {
[[[NSApp delegate] statusItem] popUpStatusItemMenu:[self menu]]; // or another method that returns a menu
}

这通常有效,但是当您单击状态项时,菜单显示得太高。

点击之前的样子:/image/coaQX.png

点击后的样子:/image/AzX3a.png (菜单出现在屏幕顶部——啊!)

如何让菜单出现在状态栏的底部?

谢谢!

最佳答案

你是如何弹出菜单的?你想做的是这样的:

- (void)mouseDown:(NSEvent *)event {
[statusItem popUpStatusItemMenu:[self menu]];
}

当然,您的 View 将需要对状态项的引用。

关于objective-c - NSStatusItem 的自定义 NSView 类中的 NSMenu 未出现在状态栏底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448361/

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