0

这是我到目前为止得到的。

- (IBAction)HUDPanelDictionaryHide:(id)sender{
    extern NSPanel HUDPanelDictionary;
     [HUDPanelDictionary close];
}

这显然行不通。

HUDPanelDictionary 在 .xib 文件的单独 .h 和 .m 文件中声明。我需要从另一个 .h 和 .m 文件中关闭此面板以获取另一个 .xib 文件。对不起,我太含糊了!

有任何想法吗??

以利亚

4

1 回答 1

1

您需要#import包含 HUDPanelDictionary 声明的标头。

例如:

#import "HUDPanelDictionary.h"

@interface MyController

- (IBAction)hideDictionaryPanel:(id)sender {
    [HUDPanelDictionary close];
}

@end

我也会以不同的方式命名,例如“DictionaryHUD”而不是“HUDPanelDictionary”。“面板”与“HUD”是多余的,你应该更关心它的意图而不是它在类层次结构中的位置。

我要做的另一件事是使 DictionaryHUD 成为 NSWindowController 子类,并让它公开一个单例共享实例,而不是使用全局变量来指向面板本身。那么上面的代码将如下所示:

#import "DictionaryController.h"

@interface MyController

- (IBAction)hideDictionaryPanel:(id)sender {
    [[DictionaryController sharedDictionaryController] hideDictionaryPanel:sender];
}

@end

这将字典面板/HUD 的主要责任放在单个控制器类的实例上,其他控制器(比如管理主窗口工具栏的控制器)可以转发它们的交互。您甚至可以将字典 HUD 窗口控制器放在响应者链中,让它自动处理诸如此类的操作,-hideDictionaryPanel:因此无需进行此类转发。

于 2010-07-11T21:48:43.117 回答