swift - 如何将选择器绑定到 NSObject 中的方法
问题描述
在 macOS swiftui 项目中,我有以下代码
import Cocoa
import SwiftUI
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var window: NSWindow!
var statusItem: StatusItem = StatusItem()
func applicationDidFinishLaunching(_ aNotification: Notification) {
}
@objc public func statusBarButtonClicked(sender: NSStatusBarButton) {
let event = NSApp.currentEvent!
if event.type == NSEvent.EventType.rightMouseUp {
print("Right click! (AppDelegate)")
} else {
print("Left click! (AppDelegate)")
}
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
import Cocoa
class StatusItem : NSObject {
private let item = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
override init() {
super.init()
self.item.button?.title = "title"
self.item.button?.action = #selector(self.statusBarButtonClicked(sender:))
self.item.button?.sendAction(on: [.leftMouseUp, .rightMouseUp])
}
@objc public func statusBarButtonClicked(sender: NSStatusBarButton) {
let event = NSApp.currentEvent!
if event.type == NSEvent.EventType.rightMouseUp {
print("Right click! (NSObject)")
} else {
print("Left click! (NSObject)")
}
}
}
但是当我单击 NSStatusBarButton 时,它会向控制台打印“左键单击!(AppDelegate)”和“右键单击!(AppDelegate)”。
为什么会这样?以及如何让它调用在 StatusItem 类中定义的 statusBarButtonClicked 方法?
解决方案
设置按钮action
只是您需要做的一半。您还需要指定一个target
. 添加
self.item.button?.target = self
我相信你会得到你想要的结果。
发生的事情是action
指定要调用的选择器并target
指定要调用它的对象。
推荐阅读
- java - 公钥到字符串,然后返回公钥 java
- javascript - html2canvas 1.0.0-alpha.12 在没有背景样式的情况下获取快照
- python - Python中的算术表达式不能使用多个位值
- javascript - 在php中根据用户状态显示动态内容
- java - 如何将鼠标悬停在父元素上,然后使用 Selenium 和 Action 类单击子元素
- r - 如何使用 R 从 excel 创建 XPT 文件
- javascript - 当所有的 knockout.js 都呈现后运行一个 jQuery 函数
- spring - 如何参数化搜索位置路径以在其他配置文件中重用
- javascript - 我可以在浏览器中隐藏检查元素选项吗?
- java - 我们可以在java中创建一个临时表还是在java中将一个映射与一个表连接起来?