【问题标题】:Programmatically creating menus with Swift 3 and Cocoa使用 Swift 3 和 Cocoa 以编程方式创建菜单
【发布时间】:2016-09-30 07:09:09
【问题描述】:

我正在尝试使用 Swift 3 以编程方式(即没有 nib 文件)创建一个 Cocoa GUI 应用程序。我在显示应用程序菜单时遇到了麻烦。

我希望下面的代码在菜单栏上显示一个文件菜单项。相反,当窗口启动并按预期工作时,设置菜单的代码似乎没有效果:

import AppKit

final class ApplicationController: NSObject, NSApplicationDelegate {
    var mainWindow: NSWindow?

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        let mainMenu = NSMenu()
        let mainMenuFileItem = NSMenuItem(title: "File", action: nil, keyEquivalent: "")
        let fileMenu = NSMenu(title: "File")
        fileMenu.addItem(withTitle: "New...", action: nil, keyEquivalent: "n")
        mainMenuFileItem.submenu = fileMenu

        mainMenu.addItem(mainMenuFileItem)

        NSApp.mainMenu = mainMenu

        let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 800, height: 600),
                                            styleMask: [.titled, .closable, .resizable, .miniaturizable],
                                            backing: NSBackingStoreType.buffered, defer: false)
        window.orderFrontRegardless()
        window.title = "Hello World"
        self.mainWindow = window

        NSApp.activate(ignoringOtherApps: true)

    }

    func applicationWillTerminate(_ aNotification: Notification) {
        print("terminating")
    }

    func applicationShouldTerminateAfterLastWindowClosed(_ app: NSApplication) -> Bool{
        return true
    }
}

let app = NSApplication.shared()
let controller = ApplicationController()
app.delegate = controller

app.run()

我找到的最接近工作示例的是this answer。但是,它似乎适用于早期版本的 Swift/Cocoa,我无法让该示例正常工作。

我做错了什么?

【问题讨论】:

    标签: macos cocoa swift3 nsmenu


    【解决方案1】:

    需要致电NSApp.setActivationPolicy(.regular) 使应用程序成为“常规”应用程序。在 app.run() 之前调用可以解决没有菜单显示的问题。

    因此,代码的“主要”部分应该是:

    let app = NSApplication.shared()
    NSApp.setActivationPolicy(.regular)
    let controller = ApplicationController()
    app.delegate = controller
    
    app.run()
    

    【讨论】:

    • 根据我的测试,这不再需要。但我的“主要”看起来也很不一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2021-02-22
    • 2018-12-19
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多