首页 > 解决方案 > 在 macOS 上额外添加菜单栏

问题描述

我正在尝试创建一个将在 macOS 上额外显示菜单栏的应用程序。

到目前为止,我使用了很多我在网上找到的代码,但是,虽然它们都可以编译,但没有一个真正显示菜单。

代码片段或多或少是这样的:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    var statusBarItem: NSStatusItem!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        let statusBar = NSStatusBar.system
        statusBarItem = statusBar.statusItem(
            withLength: NSStatusItem.squareLength)
        statusBarItem.button?.title = ""

        let statusBarMenu = NSMenu(title: "Cap Status Bar Menu")
        statusBarItem.menu = statusBarMenu

        statusBarMenu.addItem(
            withTitle: "Order a burrito",
            action: #selector(AppDelegate.orderABurrito),
            keyEquivalent: "")

        statusBarMenu.addItem(
            withTitle: "Cancel burrito order",
            action: #selector(AppDelegate.cancelBurritoOrder),
            keyEquivalent: "")
    }

    @objc func orderABurrito() {
        print("Ordering a burrito!")
    }

    @objc func cancelBurritoOrder() {
        print("Canceling your order :(")
    }

菜单上不显示任何内容。我需要启用什么才能使其显示菜单吗?我也尝试了图像,它也不起作用。

标签: swiftmacosnsstatusbar

解决方案


有趣的。我做了同样的教程,我没有任何问题。

https://8thlight.com/blog/casey-brant/2019/05/21/macos-menu-bar-extras.html

这是我的代码中的内容。

--

// at the top
import Cocoa
import SwiftUI

// first lines of the class AppDelegate

var window: NSWindow!  // I don't think this is important

var statusBarItem: NSStatusItem!

// top lines of applicationDidFinishLaunching

// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()

// Menu Bar Extras
let statusBar = NSStatusBar.system

statusBarItem = statusBar.statusItem(withLength: NSStatusItem.squareLength)

statusBarItem.button?.title =  ""

let statusBarMenu = NSMenu(title: "Cap Status Bar Menu")

statusBarMenu.addItem(
    withTitle: "Order a burrito",
    action: #selector(AppDelegate.orderABurrito),
    keyEquivalent: ""
)

statusBarMenu.addItem(
    withTitle: "Cancel burrito order",
    action: #selector(AppDelegate.cancelBurritoOrder),
    keyEquivalent: ""
)

statusBarItem.menu = statusBarMenu

// the rest is window creation code

// more methods of the AppDelegate
// make sure this part of the code is correct to be
// "superstitious"; maybe Xcode does not behave properly
// with the @objc keywords/modifiers/decorators
@objc func orderABurrito() {
    print("Ordering a burrito!")
}

@objc func cancelBurritoOrder() {
    print("Cancelling order...")
}

否则,我建议您重新学习本教程,以防您第一次没有看到某些内容。祝你好运,编码愉快。


推荐阅读