gpt4 book ai didi

swift - 如何将选择器绑定(bind)到 NSObject 内部的方法

转载 作者:行者123 更新时间:2023-12-03 17:00:56 30 4
gpt4 key购买 nike

在 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方法?

最佳答案

设置按钮的操作只是您需要做的事情的一半。您还需要指定一个目标。添加

 self.item.button?.target = self 

我相信您会得到您想要的结果。

发生的事情是 action 指定要调用的选择器,target 指定要调用它的对象。

关于swift - 如何将选择器绑定(bind)到 NSObject 内部的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61486870/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com