gpt4 book ai didi

macos - 使用 Swift 3 和 Cocoa 以编程方式创建菜单

转载 作者:行者123 更新时间:2023-12-03 16:09:37 26 4
gpt4 key购买 nike

我正在尝试使用 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 的早期版本,我无法使该示例正常工作。

我做错了什么?

最佳答案

需要调用NSApp.setActivationPolicy(.regular)以使应用程序成为“常规”应用程序。在 app.run() 之前进行该调用修复了不显示菜单的问题。

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

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

app.run()

关于macos - 使用 Swift 3 和 Cocoa 以编程方式创建菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39785679/

26 4 0