我有一个NSPopUpButton
我已经分类,我计划在我的程序中的多个位置使用。它是子类,因为它具有特殊的功能。
通常,要接收动作事件,您需要在控制器类中创建一个方法,然后将其与接口构建器连接以处理该操作。例如,如果用户更改了NSPopUpButton
中的一个选项,它会向接口构建器操作方法发送消息,如下所示。
- (IBAction)sourcePopUpMenuChanged:(id)sender {
NSLog(@"sourcePopUpMenuChanged");
}
在大多数情况下这很好,但在我的情况下,我想让它将消息发送到它自己的子类而不是控制器类。我想这样做是因为我在幕后设置一个全局变量来跟踪popUpMenu
的索引,因为popupmenu出现在我的应用程序的许多不同窗口中。
我知道我可以为此控件的每个窗口创建IBAction
个事件,并且每次都手动设置全局变量,但这似乎效率低下。
有没有办法,如果我的控件的任何实例接收到“操作”消息,我可以运行某种代码,例如,为gIndex = PopUpMenu Index Selected
设置一个全局变量。
非常感谢帮助!
答案 0 :(得分:4)
要回答您的问题,您可以覆盖sendAction:to:
子类上的方法NSPopUpButton
来完成您的工作。只是不要忘记拨打super
,以便将操作消息转发给常规接收者。
当控件想要发送已配置的操作时,它会使用sendAction:to:
方法调用sendAction:to:from:
上的NSApp
(单个NSApplication
实例)。此方法在响应者链后面找到操作消息的最终接收者。