macos - OSX 状态菜单在 Swift 中不起作用

标签 macos cocoa swift

我尝试用 swift 向状态栏添加一个简单的状态菜单,但它不会显示。

使用 objective-c 这有效:


AppDelegate.h

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    IBOutlet NSMenu *statusMenu;
    NSStatusItem * statusItem;
}

@end

AppDelegate.m

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    [statusItem setMenu:statusMenu];
    [statusItem setTitle:@"Status Menu"];
    [statusItem setHighlightMode:YES];
}

@end

但是如果我尝试在 swift 中做基本相同的事情,它什么也做不了。

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var statusMenu: NSMenu;

    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        let bar = NSStatusBar.systemStatusBar()

        let statusItem = bar.statusItemWithLength(CGFloat(NSVariableStatusItemLength))
        statusItem.title = "Status Menu"
        statusItem.menu = statusMenu
        statusItem.highlightMode = true
    }

}

没有错误,它只是什么也没做。函数 applicationDidFinishLaunching 被调用,因为它内部的 println() 创建了输出。

有人知道我在这里做错了什么吗?

最佳答案

这里的问题是 statusItemapplicationDidFinishLaunching 完成执行并释放对象后超出范围。在您的 Objective-C 代码中不是这种情况,因为 statusItem 变量是在类级别声明的。

这应该可以使您的 Swift 代码正常工作:

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var statusMenu: NSMenu;
    var statusItem: NSStatusItem?;

    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        let bar = NSStatusBar.systemStatusBar()

        statusItem = bar.statusItemWithLength(CGFloat(NSVariableStatusItemLength))
        statusItem!.title = "Status Menu"
        statusItem!.menu = statusMenu
        statusItem!.highlightMode = true
    }

}

关于macos - OSX 状态菜单在 Swift 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069432/

相关文章:

macos - 带有预设行的静态 NSTableView

macos - MacOSX 10.6 上的 getline 崩溃 C 编译器?

c++ - Mac OSX 上的 GCC--gcc 的多个版本

objective-c - 如何以编程方式以最小化模式启动 OS X 应用程序?

objective-c - 如何编译在 Windows 上使用 NSApplication 的 GNUstep 应用程序?

ios - Swift 无法从 parse.com 检索图像

python - Selenium:Runtime.executionContextCreated 无效 'context':

objective-c - 是否 setNeedsDisplay :NO have any use at all?

swift - viewDidDisappear 在主线程上吗?

ios - Facebook SDK iOS with Swift - 请求好友列表 - 方法说明