2010-05-13 74 views
1

我正在處理基於文檔的Cocoa應用程序。在啓動時,用戶將看到一個「歡迎面板」(類型爲NSPanel),並帶有用於「創建新文檔」和「打開現有文檔」等常用操作的按鈕。這些操作分別鏈接到第一響應者的newDocument:openDocument:操作,就像文件菜單中的匹配項目一樣。如何在創建或打開新文檔時關閉NSPanel?

一切正常......有三個注意事項:

  1. 歡迎面板創建或打開一個新的文檔時沒有被駁回。
  2. 文檔窗口在創建時沒有焦點。
  3. 打開文檔窗口沒有窗口標題欄中顯示的打開文件;同樣,新文檔窗口也不會像預期的那樣使用「無標題」,「無標題2」,「無標題3」等標題創建。 (我不只是因爲這很煩人提這個,而是因爲它可能會產生一些洞察到什麼錯誤。)

我已經部分地通過使我的應用程序控制器的歡迎面板的委託解決#1。當單擊「打開現有文檔」按鈕時,面板會退出其按鍵狀態(因爲正在打開文件瀏覽器對話框),所以我可以在代理人的windowDidResignKey:方法中關閉面板。但是,我無法弄清楚如何在創建新文檔時關閉面板,因爲在創建新文檔時找不到發佈的通知或調用的委託方法。最終,#2仍然是一個問題,因爲文檔窗口在創建時無法獲得焦點。

我只有子類NSDocument - 我沒有使用自定義文檔或窗口控制器。我也嘗試將面板更改爲NSWindow,認爲NSWindow可能會有不同的行爲,但同樣的問題正在發生。

+0

其他人可能會回答這個問題,但如果您可以創建併發布示例問題示例應用程序,它將會(並始終)有用。 – ericg 2010-05-13 15:41:49

+0

我會的,但我不認爲代碼本身是相關的。接口的相關部分是一個nib(所以沒有代碼),應用程序利用Cocoa的文檔框架來完成它的工作,所以應用程序本身的代碼相對較少。 – mipadi 2010-05-13 17:13:43

回答

0

創建自定義文檔控制器,並讓它知道你的起始點面板的控制器,然後隱藏addDocument:中的窗口並在removeDocument:中再次顯示它(如果沒有其他文件保留)。

這就是我們在Adium Xtras Creator所做的。該代碼在a BSD license(不像Adium本身),所以你可以借用它,如果你想。

+0

這解決了第一個問題,但第二個問題 - 新建/打開的文檔窗口不關注創建 - 仍然存在。任何想法可能導致這個問題? – mipadi 2010-05-14 13:41:42

+0

沒有。 Adium Xtras Creator沒有這個問題。新窗口不是關鍵,不是主要的,或者不是? – 2010-05-14 21:02:49

0

而不是鏈接到第一響應者的默認操作,只需在窗口控制器中創建自定義操作方法,並設置您的按鈕來觸發這些操作。在您的方法中,您需要關閉歡迎窗口,然後創建一個新文檔。

事情是這樣的:

- (IBAction)createNewDocument:(id)sender 
{ 
    //this will close the window if you're using NSWindowController 
    [self close]; 
    [[NSDocumentController sharedDocumentController] newDocument:sender]; 
} 

或者,如果你使用的不是NSWindowController的歡迎窗口中,您可以直接剛消息的窗口:

- (IBAction)createNewDocument:(id)sender 
{ 
    //assume you have a "window" outlet connected to your welcome window 
    [window orderOut:sender]; 
    [[NSDocumentController sharedDocumentController] newDocument:sender]; 
} 
+0

可以工作,除了項目#2:文檔窗口出現時沒有焦點。有關如何實現這一目標的任何想法? – mipadi 2010-05-14 01:39:55

+0

嘗試在下一個事件循環中調用'-newDocument'方法:'[[NSDocumentController sharedDocumentController] performSelector:@selector(newDocument :) withObject:sender afterDelay:0];' – 2010-05-14 02:12:30

+0

嗯,那也行不通。 – mipadi 2010-05-14 03:40:00

相關問題