所以我是 Swift 的新手,想在 MacOS 上创建一个简单的示例状态栏应用程序。
为了保持整洁,我创建了一个子类 App,它正在创建状态项。然后在 AppDelegate.swift 的 applicationDidFinishLaunching 函数中创建这个类。

但不知何故,当我按下状态图标时,控制台上没有打印任何内容。但是,如果我复制 AppDelegate 文件中的代码,它就可以工作。有人知道我做错了什么以及为什么它在子类中不起作用吗?

这是我自己的类的代码:

import Cocoa

class App: NSObject {

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

    override init() {
        print("created app instance");

        if let button = menuBarItem.button {
            button.image = NSImage(named: NSImage.Name("StatusBarButtonImage"))
            button.action = #selector(test(_:))
        }
    }

    @objc func test(_ sender: Any?) {
        print("button was pressed")
    }
}

和 AppDelegate:
import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var appInstance: App!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application
        appInstance = App()
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }
}

最佳答案

如果按钮显示出来并且单击它时什么也没发生,在我看来,您需要确保将按钮的 target 设置为 App 实例。例如。:

button.target = self

否则,该 Action 只会在响应者链中跟进。

关于swift - StatusItem 的操作在 Swift 中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52316921/

10-14 21:54
查看更多