0

我有一个NSPopUpButton子类,我计划在我的程序中的多个位置使用它。它是子类的,因为它具有特殊的功能。

通常要接收动作事件,您在控制器类中创建一个方法,然后将其与接口构建器连接以处理动作。例如,如果用户更改了其中的一个选项,NSPopUpButton它将向界面构建器操作方法发送一条消息,如下所示。

- (IBAction)sourcePopUpMenuChanged:(id)sender {
    NSLog(@"sourcePopUpMenuChanged");
}

在大多数情况下这很好,但在我的情况下,我想让它把消息发送到它自己的子类而不是控制器类。我想这样做是因为我在后台设置了一个全局变量来跟踪 的索引popUpMenu,因为弹出菜单出现在我的应用程序的许多不同窗口中。

我知道我可以IBAction为这个控件的每个窗口创建事件并每次手动设置全局变量,但这似乎效率低下。

有没有办法,如果我的控件的任何实例收到“操作”消息,我可以运行某种代码,例如,为gIndex = PopUpMenu Index Selected.

非常感谢您的帮助!

4

1 回答 1

4

要回答您的问题,您可以覆盖子类sendAction:to:上的方法NSPopUpButton来完成您的工作。只是不要忘记调用super,以便将操作消息转发给常规接收者。

当控件想要发送配置的操作时,它使用sendAction:to:调用的方法sendAction:to:from:NSApp单个NSApplication实例)。此方法遵循响应者链来查找操作消息的最终接收者。

于 2013-02-08T21:59:31.613 回答