2010-07-11 51 views
0

這是我到目前爲止得到的結果。從一個單獨的源文件關閉一個源文件中的面板

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

這顯然不起作用。

HUDPanelDictionary在.h和.m文件中爲.xib文件聲明。我需要從另一個.h和.m文件關閉另一個.xib文件。對不起,我太模糊了!

任何想法??

利亞

+0

HUDPanelDictionary是一個類還是實例?我猜這是NSPanel的一個實例,給出了你上面想說的。 – 2010-07-11 21:46:04

+0

是的,這是一個實例。我只需要關閉另一個.h和.m文件的.h和.m文件中的面板。 – objectiveccoder001 2010-07-11 21:48:17

+0

請注意,對象的實例始終是指針,無論是「id」還是「SomeClass *」。因此「extern NSPanel HUDPanelDictionary;」在Objective-C中是無意義的,因爲它缺少*。 – 2010-07-11 21:50:04

回答

1

您需要#import含HUDPanelDictionary聲明的標題。

例如:

#import "HUDPanelDictionary.h" 

@interface MyController 

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

@end 

我也是會說出不同的事情,例如 「DictionaryHUD」,而不是 「HUDPanelDictionary。」 「Panel」與「HUD」是多餘的,你應該關心它的意圖而不是它在類層次結構中的位置。

我會做的另一件事是使DictionaryHUD成爲NSWindowController的子類,並讓它暴露一個單例共享實例,而不是使用全局變量指向面板本身。然後,上面的代碼應該是這樣的:

#import "DictionaryController.h" 

@interface MyController 

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

@end 

這使你的字典面板的主要責任/ HUD上的單個控制器類的實例,到其他控制器(說一個管理主窗口的工具欄)可以轉發他們的互動。你甚至可以把字典HUD窗口控制器放在響應鏈中,讓它自動處理像-hideDictionaryPanel:這樣的動作,所以沒有必要做這種轉發。

+0

我剛剛那樣做,它仍然說它是未申報的。 – objectiveccoder001 2010-07-11 21:53:29

+0

查看我的其他編輯。我認爲你真正想要做的就是公開一個單獨的控制器來進行交互,而不是在兩個控制器之間共享一個全局變量。 – 2010-07-11 21:55:37

+0

好吧,我現在正在嘗試...我會讓你知道 – objectiveccoder001 2010-07-11 21:57:47

相關問題