【发布时间】:2014-05-01 17:49:50
【问题描述】:
我是 Mac OSX 开发的新手。我想建立一个允许输入文本的全局菜单项,按回车键后,它应该跳转到网页。没什么特别的。
让我困惑的是我的简单代码的以下部分:
我在AppDelegate.m 的(void)applicationDidFinishLaunching:(NSNotification *)aNotification 方法中创建了我的全局菜单项及其 NSMenu 下拉菜单。
如果我说NSStatusItem 是一个privat 局部方法变量,那么在运行应用程序后,状态项将不会显示在全局菜单栏中。
如果我将变量声明为全局私有类(在方法上方),则图标会如愿显示。
感谢您的帮助。
完整的源代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Use a NSMenu as dropdown component
NSMenu* dropdown = [NSMenu new];
// Disable auto enabled items
[dropdown setAutoenablesItems:NO];
// Add custom view menu item
// 1. Add a empty item to menu
NSMenuItem* item = [NSMenuItem new];
[dropdown addItem: item];
// 2. Create a new custom view with a placeholder rectangle
NSView* view = [[NSView new] initWithFrame: NSMakeRect(0,0,200,20)];
item.view = view;
// 3. Add a text field to the custom view
NSTextField* textField = [[NSTextField alloc] initWithFrame: NSMakeRect(5,0,190,20)];
[view addSubview: textField];
// Add seperator
[dropdown addItem:[NSMenuItem separatorItem]];
// Add quit button
NSMenuItem* menuItem = [dropdown addItemWithTitle:@"Quit"
action:@selector(terminate:)
keyEquivalent:@"q"];
// Add cmd-key as required keyboardshortcut starting point
[menuItem setKeyEquivalentModifierMask:NSCommandKeyMask];
// Get a statusbar item
NSStatusItem* statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
// Set icon
[statusItem setImage:[NSImage imageNamed:@"icon.png"]];
// Set tooltip
[statusItem setToolTip:@"Jump to an issue."];
// Enable highlighting on click.
// If left mouse button is pressed, paint the background blue.
// Default behabior for status item according zo UI guidlines is YES,
// but the default value of a status item would be NO.
[statusItem setHighlightMode:YES];
// Set the dropdown as visible menu
[statusItem setMenu:dropdown];
}
【问题讨论】:
-
这是由于 ARC。在 ARC 中,对象在超出范围时被释放。当您将其声明为实例变量时,其范围是直到该实例被释放。但在方法内部,它的范围仅限于该方法。
标签: objective-c macos nsstatusitem