从单独的源文件中关闭一个源文件中的面板

时间:2010-07-11 21:42:42

标签: objective-c cocoa nswindow

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

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

这显然不起作用。

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

任何想法??

利亚

1 个答案:

答案 0 :(得分: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:之类的操作,因此无需进行任何类型的转发。