如何显示 NSStatusBar 项目并隐藏停靠栏图标?

问题描述 投票:0回答:3

我尝试将“应用程序是代理”设置为 1,但状态栏项目消失了。当设置为 0 时,状态栏项目和停靠栏图标都会显示。如何显示状态栏项目但隐藏停靠栏图标?

我在

awakeFromNib()
applicationDidFinishLaunching()
中的
AppDelegate.swift
中尝试了以下操作:

//class scope    
let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength)

//function scope    
self.statusItem.image = NSImage(named: "myImage")
let menu = NSMenu(title: "MyApp-Menu")
let menuItem = NSMenuItem(title: "title", action: nil, keyEquivalent: "")
menu.addItem(menuItem)
self.statusItem.menu = menu
swift xcode macos user-interface cocoa
3个回答
4
投票

针对 Mac OS 10.14 进行了更新

在 AppDelegate 中:

let statusItem = NSStatusBar.system.statusItem(withLength:NSStatusItem.squareLength)

func applicationDidFinishLaunching(_ aNotification: Notification) {
    if let button = statusItem.button {
        button.image = NSImage(named:NSImage.Name("StatusBarButtonImage"))
        button.action = #selector(launchFromTray)
    }
    constructMenu()
}

func constructMenu() {
    let menu = NSMenu()
    menu.addItem(NSMenuItem.separator())
    menu.addItem(NSMenuItem(title: "Show", action: #selector(launchFromTray), keyEquivalent: "w"))
    menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))

    statusItem.menu = menu
}

您现在应该将

Application is agent (UIElement)
设置为 YES。应该可以正常工作,希望这对某人有帮助


1
投票

想要隐藏dock图标,必须将“Application is Agent”设置为“YES”,或者可以将app设置为UIElement Application:

 ProcessSerialNumber psn = { 0, kCurrentProcess };
 OSStatus rt = TransformProcessType(&psn, kProcessTransformToUIElementApplication);

根据您提供的代码部分,我认为您说的“状态栏项目消失”并不是真正消失,它只是菜单消失。除非你写错代码,否则状态栏不会消失,但你的代码看起来没问题。

如果我的想法是对的,菜单就会消失,因为该应用程序是代理应用程序。你需要做的只是让它再次成为一个 UI Element 应用程序:

ProcessSerialNumber psn = { 0, kCurrentProcess };
    OSStatus returnCode = TransformProcessType(&psn, kProcessTransformToForegroundApplication);

运行代理应用程序时无法显示菜单栏。代理应用程序和菜单栏只能选择一个。

代理包括仅后台应用程序、不露面的仅后台应用程序和 UI 元素,但不是带有菜单栏的完整应用程序


0
投票

2024

NSApp.setActivationPolicy(.prohibited)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.