我正在基于NSObject在Swift中开发一个自定义类。这是一个statusMenu图标/菜单帮助器。当我收到在自定义类中被单击的图标的事件时,我想通过NSButton允许创建IBAction来响应用户单击按钮的方式来传递该事件。
我该怎么做?
代码:
我正在我的课堂上注册一个选择器来听点击:
statusItem.action = #selector(statusBarIconClicked)
选择器收到以下信息:
@objc func statusBarIconClicked(sender: AnyObject) {
print("clicked clicked!!")
// pass sent action on through a new sent action... how?
}
我希望它可以通过按钮可以链接到用户的方式链接到用户:
@IBAction func myClassSaysMenuWasClicked(_ sender: Any) {
// Reacting to that
}
搜索了好一阵子,却发现:一无所有。
答案 0 :(得分:0)
我认为您是在询问这种事情,它显示在“连接”检查器中(这是iOS,不是macOS,但这是相同的想法):
然后的问题是:当用户在Xcode的nib编辑器中选择我的类的实例时,我希望这些已发送事件出现在Connections检查器中,以便用户可以连接其中的一个并使用目标动作架构。
仅当您的类是Control子类时才可以这样做。因此,例如,在iOS中,自定义UIControl子类在Interface Builder中显示那些已发送的事件。
如果您不能执行此操作,则程序员将无法在Interface Builder中配置目标操作。您当然可以实现目标-动作体系结构,但是程序员必须在代码中设置目标和动作。 (当然,您可以通过将目标设置为出口来完成其中的一半。)
答案 1 :(得分:0)
我处理了以上评论,并在Google上进行了进一步搜索。我发现解决方案是在这一行中将NSObject更改为NSController:
class StatusMenuController: NSControl, NSMenuDelegate {
当我想触发发送的动作时运行以下命令:
if let theAction = self.action { NSApp.sendAction(theAction, to: self.target, from: self) }
当然会检查if-命令,以便在尝试使用操作之前先进行实际设置。
在研究过程中,我发现无法添加任何进一步发送的动作。到达这里的方式似乎是委托人。