swift 如何在可可macOS的AppDelegate中创建主菜单和菜单项?

z18hc3ub  于 2023-02-07  发布在  Swift
关注(0)|答案(1)|浏览(256)

我正在尝试从AppDelegate构建我的主菜单,我已经断开了我的故事板文件,我正在使用一个main. swift文件加载我的应用程序作为@main我尝试了这个代码来构建我的菜单,但它不工作,该函数不创建我的项目,我也没有得到任何错误或问题,我认为创建的菜单不能插入到我的应用程序。
我的主. swift文件:

import Cocoa

// 1
let app = NSApplication.shared
let delegate = AppDelegate()
app.delegate = delegate

// 2
_ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
import Cocoa
import SwiftUI

class AppDelegate: NSObject, NSApplicationDelegate {

    private var window: NSWindow!

    func applicationDidFinishLaunching(_ aNotification: Notification) {

        window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
            styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false)
        
        window.center()
        window.setFrameAutosaveName("Main Window")
        window.title = "No Storyboard Window"
        window.contentView = NSHostingView(rootView: ContentView())
        window.makeKeyAndOrderFront(nil)
        
        customMainMenu()
 
    }
    
    
    func customMainMenu() {
        
        if let appMainMenu = NSApp.mainMenu {
            
            let mainMenu = NSMenuItem()
            mainMenu.submenu = NSMenu(title: "MainMenu")

            let mainMenuItem1 = NSMenuItem(title: "Close", action: #selector(NSWindow.performClose(_:)), keyEquivalent: "w")
            mainMenuItem1.keyEquivalentModifierMask = .command

            let mainMenuItem2 = NSMenuItem(title: "Quit", action: #selector(NSApplication.shared.terminate(_:)), keyEquivalent: "q")
            mainMenuItem2.keyEquivalentModifierMask = .command
            

            mainMenu.submenu?.items = [mainMenuItem1, mainMenuItem2]
            appMainMenu.items = [mainMenu]
            
        }
    }
 
}
nbysray5

nbysray51#

下面的源代码将为swift创建一个基本菜单。要在Xcode中运行,请创建一个Swift项目,删除AppDelegate文件的内容,并将其替换为以下内容。然后将AppDelegate.swift文件的名称更改为main.swift并运行。该窗口已经可以关闭,因此我没有为此添加多余的菜单项。

import Cocoa

// **** App Delegate **** //
class AppDelegate: NSObject, NSApplicationDelegate {
 var window: NSWindow!

func buildMenu() {

 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")
}
    
func buildWnd() {
    
let _wndW = CGFloat (440)
let _wndH = CGFloat (300)
// **** Window **** //
window = NSWindow(contentRect:NSMakeRect(0,0,_wndW,_wndH),styleMask:[.titled, .closable, .miniaturizable, .resizable], backing:.buffered, defer:false)
window.center()
window.title = "Swift Test Window"
window.makeKeyAndOrderFront(window)
}
 
func applicationDidFinishLaunching(_ notification: Notification) {
 buildMenu()
 buildWnd()
}

}
let appDelegate = AppDelegate()

// **** Main **** //
let application = NSApplication.shared
application.delegate = appDelegate
application.run()

相关问题