bal*_*neb 6 macos cocoa nsmenu swift3
我正在尝试使用Swift 3以编程方式创建一个Cocoa GUI应用程序(即没有nib文件).我遇到了应用程序菜单显示的问题.
我希望下面的代码在菜单栏上显示File菜单项.相反,当窗口启动并按预期工作时,设置菜单的代码似乎没有任何效果:
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()
Run Code Online (Sandbox Code Playgroud)
我找到的最接近工作实例的是这个答案.但是,它似乎是早期版本的Swift/Cocoa,我无法让这个例子起作用.
我究竟做错了什么?
需要致电NSApp.setActivationPolicy(.regular)使该应用程序成为“常规”应用程序。在 app.run() 之前进行该调用修复了不显示菜单的问题。
因此,代码的“主要”部分应该是:
let app = NSApplication.shared()
NSApp.setActivationPolicy(.regular)
let controller = ApplicationController()
app.delegate = controller
app.run()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3613 次 |
| 最近记录: |