【问题标题】:Adding a Menu to the app menu in AppKit using NSMenu使用 NSMenu 将菜单添加到 AppKit 中的应用程序菜单
【发布时间】:2021-08-19 15:35:11
【问题描述】:

我正在尝试使用 NSMenu 类通过 Appkit 将菜单添加到应用程序菜单。但到目前为止我还不确定如何称呼它:

class AppDelegate: NSObject, NSApplicationDelegate {

    var window: NSWindow!
    var menu: NSMenu!




    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Create the SwiftUI view that provides the window contents.
        let contentView = ContentView()

        // Create the window and set the content view.
        window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 512),
            styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false)
        window.isReleasedWhenClosed = false
        window.center()
        window.setFrameAutosaveName("Main Window")
        window.contentView = NSHostingView(rootView: contentView)
        window.makeKeyAndOrderFront(nil)
        
        class myMenu: NSMenu {
            init(aTitle: "HelloWorld")
        }
    }

但这只会给我“':'之后的预期参数类型”和“'必需'初始化程序'init(coder:)'必须由'NSMenu'的子类提供”。

【问题讨论】:

标签: swift macos swiftui appkit


【解决方案1】:

我对 buildWnd 和 buildMenu 使用单独的函数,但这应该可以使用您的技术。在您的 swift 项目中创建一个名为 main.swift 的新文件并删除预先存在的 AppDelegate。将此代码复制/粘贴到 main.swift 文件中。

import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate {

    var window: NSWindow!
   // var menu: NSMenu!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Create the SwiftUI view that provides the window contents.
       // let contentView = ContentView()

        // Create the window and set the content view.
        window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 512),
            styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false)
        window.isReleasedWhenClosed = false
        window.center()
        window.setFrameAutosaveName("Main Window")
     //   window.contentView = NSHostingView(rootView: contentView)
        window.makeKeyAndOrderFront(nil)
        
        let mainMenu = NSMenu()
        NSApp.mainMenu = mainMenu
       // **** App menu **** //
        let appMenuItem = NSMenuItem()
        mainMenu.addItem(appMenuItem)
        let appMenu = NSMenu()
        appMenuItem.submenu = appMenu
        appMenu.addItem(withTitle:"Quit", action:#selector(NSApplication.terminate), keyEquivalent: "q")

    }
}
let appDelegate = AppDelegate()

// **** Main **** //
let application = NSApplication.shared
application.delegate = appDelegate
//application.activate(ignoringOtherApps:true)
application.run()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多