2011-02-07 60 views
3

如何在Cocoa中使用多個窗口?我創建了一個可可應用程序。當我運行該應用程序時,它會自動顯示一個默認窗口。我在窗口中添加了一個按鈕。當我單擊按鈕時,我想打開另一個名爲MySecondWindow的窗口,我在IB中創建了這個窗口。使用界面生成器處理多個窗口

我爲MySecondWindow創建了窗口控制器(MySecondWindowController)並將它鏈接到IB中的筆尖。當我點擊主窗口中的按鈕時,我打電話給一個IBAction,它創建了一個MySecondWindowController實例,並用[mySecondWindowObj window]調用NSApp beginSheet:方法。我收到NSlog中的Modal session requires modal window消息。當我嘗試打印[mySecondWindowObj window]NSLog,它打印null ..

我不知道該怎麼做。做這項工作需要做些什麼?我需要幫助..

謝謝..

+0

它是基於文檔的應用程序嗎? `MySecondWindow`在它自己的nib文件中? – 2011-02-07 05:55:21

+0

不是基於文檔的應用程序。是的,MySecondWindow在它自己的nib文件中。 – EmptyStack 2011-02-07 05:56:23

回答

3
YourWindowController* sheet; 

[[NSApplication sharedApplication] beginSheet:[sheet window] 
           modalForWindow:[[NSApplication sharedApplication] mainWindow] 
           modalDelegate:nil 
           didEndSelector:nil 
            contextInfo:nil]; 

確保您的窗口得到正確實例化。確保IB中的「Visible At Launch」選項未被選中。

編輯:我只是注意到你正在從一個單獨的筆尖文件加載此窗口。確保你正確加載它。使用此:

YourWindowController* sheet = [[YourWindowController alloc] initWithWindowNibName:@"NameOfNibMinusExtension"]; 

ALSO:

檢查並確保「文件所有者」類型設置爲自定義的窗口控制器的類名,並且它的「窗口」設置爲在筆尖窗口。

右鍵點擊(或Cmd的+點擊)上的文件的所有者,並確保「窗口」屬性連接到相應的窗口。此外,再次確保窗口的「啓動時可見」未被選中。

1

按住Control鍵,單擊並按住按鈕,然後拖動線到MySecondWindow。它會給你一個充滿方法的黑盒子:選擇makeKeyAndOrderFront:

這樣做是它使按鈕(NSButton的實例)發送makeKeyAndOrderFront:消息的窗口,當你點擊按鈕。該按鈕是NSControl的一個子類,它實現了Cocoa中所謂的目標/操作系統。 Interface Builder,當你拖動這一行時,將按鈕的目標設置爲MySecondWindow,動作爲makeKeyAndOrderFront:。然後,NSButton會在內部進行編程,以在收到點擊時將動作消息發送給目標。

有意義嗎?