2011-11-17 46 views
1

我在尋找最簡單的例子,它顯示了一個窗口打開另一個窗口,然後關閉它。可可:創建並關閉另一個窗口

我似乎陷入困境的地方是與NIBs以及如何連接插座。我可以很容易地創建窗口;關閉它是一個挑戰。

任何建議非常感謝!

我在下面附上我的代碼。我認爲我想要做的事很簡單,但它不起作用。感謝弗朗西斯,我現在可以打開和關閉窗口,但是一旦我嘗試再次打開它,應用程序崩潰(EXC_BAD_ACCESS)。我相信這是由於我對NIB與班級的關係不甚瞭解。在大多數語言中,我只需要實例化一個窗口的新實例,然後關閉它。

我有2個窗口在MainMenu.xib。 (我寧願將窗口放在單獨的NIB中,但似乎會產生其他問題!)AppDelegate有2個插座,用於窗口(原始)和其他窗口(第2個窗口創建)。

第一窗口具有2個按鈕:「打開窗口」和「關閉窗口」與在代碼2種方法連接。

代碼:

MyTestAppDelegate.h

#import <Cocoa/Cocoa.h> 

@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> { 
    NSWindow *window; 
    NSWindow *otherWindow; 
} 

@property (assign) IBOutlet NSWindow *window; 
@property (assign) IBOutlet NSWindow *otherWindow; 

- (IBAction)openOtherWindow:(id)sender; 
- (IBAction)closeOtherWindow:(id)sender; 

@end 

MyTestAppDelegate.c

#import "MyTestAppDelegate.h" 

@implementation MyTestAppDelegate 

@synthesize window; 
@synthesize otherWindow; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
} 

- (IBAction)openOtherWindow:(id)sender 
{ 
    [otherWindow makeKeyAndOrderFront:sender]; 
} 

- (IBAction)closeOtherWindow:(id)sender 
{ 
    [otherWindow close]; 
} 
@end 
+0

非常重要的細節:這是Mac應用程序,而不是iOS應用程序。 –

回答

7

基本上,你的NIB創建各種窗口,添加您的按鈕,文本框等,然後添加一個用作「控制器」的自定義對象,用於向窗口和各種控件發送和接收消息。在一個簡單的項目中,您可以使用自動創建的AppDelegate對象來控制您的窗口,對於更大的項目,您希望單獨的對象處理邏輯,這可以是NSObject或NSWindowController的實例,具體取決於您的需要。

Windows可以設置爲「啓動時可見」,可在您的應用啓動時打開它們。您也可以通過在頭文件中創建IBOutlet引用並在NIB中連接它們來手動打開它們。要顯示窗口,請向他們發送makeKeyAndOrderFront:消息。要關閉它們,請發送給他們一個close方法。

要響應窗口的打開/關閉,可以將控制器對象分配爲窗口的「委託」,這意味着它將從窗口收到消息,這些消息在NSWindowDelegate協議下的文檔中列出。因此,如果您想要打開一個窗口來響應另一個窗口關閉,您將聽取windowWillClose:消息並告訴其他窗口打開,反之亦然。

這是非常基本的東西,所以我建議你閱讀Hillegass書,或瀏覽一些各種tutorialsavailableonline

編輯:

你的應用程序崩潰,因爲你有你的otherWindow集既然你是在一個內存管理環境,「關閉時釋放」,並沒有什麼固定的窗口,在下次嘗試打開它已經被釋放了。解決方法是在NIB文件中取消選中「關閉時釋放」。請注意,您也可以直接在NIB中將您的按鈕動作連接到其他窗口本身的makeKeyAndOrderFront:performClose:方法。

+0

謝謝弗朗西斯。我同意這是基本的,但我還沒有充分理解NIB的工作。當我嘗試使用2個NIB時,我發現調用NIB中的控制器關閉會正確關閉窗口,但使用外部引用(例如,從原始窗口)會看到一個空窗口。我用精確的代碼編輯了我的問題。我搜索了很多教程網站,找不到我想創建的基本示例。 –

+0

非常感謝弗朗西斯!正是我需要的。仍試圖獲得NIB文件的掛起。 –

0

通過的XCode 4.1使用 「UINavigationController的」 模板創建一個新項目或「主 - 細節應用程序」使用XCode 4.2中的模板「,並查看這些東西在那裏工作的方式。

如果你不通過審查的XCode模板學習興趣看看下面的教程:http://www.iosdevnotes.com/2011/03/uinavigationcontroller-tutorial/

+2

提及「窗口」表示海報不處理iOS。 –

+0

非常感謝回覆。也許我應該更清楚地知道,我正在尋找的是Mac應用程序,而不是iOS應用程序。 –

+0

話雖如此 - 如果有代碼與我正在嘗試做的相似,我仍會看看這些示例。 –

相關問題