所以我是 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/