2012-10-18 56 views
0

我試圖添加一個菜單項以顯示主窗口。當窗口未被最小化或關閉(黃色和紅色的x按鈕)時,它被啓用,但是當它出現時,菜單項變灰。這當然是無用的和愚蠢的。 :)Mac應用程序,menuitem將主窗口關閉/最小化爲灰顯

另一個菜單項File/Page Setup ...不會以相同的方式變爲灰色(在最小化/關閉時)。我發現這個菜單項和我創建的菜單項之間沒有IB差異,除了標題。兩者都連接到First Responder選擇器(runPageLayout:用於頁面設置,showWindow:用於我的),都有鍵盤快捷鍵,並且都啓用。

同樣,除了標題,父菜單項是相同的。

如何確保在用戶按下紅色x或黃色按鈕時顯示主窗口菜單項可用?

編輯: 通過取消選中父菜單項的自動啓用項目,我使菜單項不灰色。

這使得在應用程序的標準NSDocument類調用此方法:

- (IBAction)clickMinimizeButton:(id)sender { 
    NSWindow *ww=[[NSApplication sharedApplication] mainWindow]; 
    NSLog(@"%@",ww); 
} 

和ww是一個有效的對象。

問題是,我無法從最小化/關閉窗口恢復窗口,因爲方法不是,因此調用它時。

如何在窗口最小化/關閉時調用此方法?我想簡單地做一下最小化或關閉點擊。

應用程序中只有一個窗口,再次單擊停靠欄圖標會顯示窗口,但Apple需要一個菜單​​項才能完成同樣的操作。

似乎我必須將菜單項連接到由我創建的自定義應用程序方法(例如,肯定沒有應用程序方法可以恢復所有窗口),但我不知道在哪裏聲明它,因爲我我沒有像Cocoa Touch那樣經歷過可可。

編輯2: 從上面,我在應用程序委託中創建了一個方法,並將它連接到菜單項。即使在最小化的情況下,該方法也會調用,但我不知道用於恢復主窗口的正確代碼。這絕望的嘗試當然只激活已經激活的應用程序,而不是最小化的窗口。

NSApplication *theapp=[NSApplication sharedApplication]; 
[theapp activateIgnoringOtherApps:YES]; 

所以這就是現在剩下的一切。如何在默認應用程序中模擬標準的「全部到最前面」菜單項?我會看看Apple提供的一些標準的Mac應用程序。

編輯3: 我創建了一個標準的Cocoa應用程序,它太灰色了在窗口菜單中的所有菜單項最小化窗口時。但默認的NSDocument會自動添加到這些下面,並且不會變灰。我會很高興這樣的解決方案。

由於某種原因,在我的窗口菜單中,我的NSDocument確實不會自動出現而不是。信息。plists是相同的(除了指向不同名稱的NSDocument類,當然)。

我如何

一)編程文檔添加到菜單,

B)得到,因爲它在標準的應用程序執行窗口菜單將其自動添加,或

C)用標準應用程序中的窗口菜單替換我的「損壞的」窗口菜單(如果是這種情況),該窗口菜單的行爲與預期相同?

回答

0

嘗試重命名你的方法到別的東西。 NSWindowController中已經聲明瞭showWindow:,這可能會導致衝突。還要確保假設對菜單項作出響應的對象未被釋放。

+0

感謝您的回答!它沒有被釋放。將它連接到另一個方法是行不通的,因爲還有一個障礙:窗口不能被最小化/關閉以便調用該方法。 –

+0

您的方法是否通過主菜單中的First Responder對象連接?如果是,那麼它應該工作。 – TheAmateurProgrammer

+0

這是一個快速響應:)好吧,正如我上面解釋的那樣,當主窗口正常時調用它,但在最小化或關閉時調用它。我在mainmenu.xib中有一個NSApplicationDelegate對象,並聲明它即使在最小化時也會調用它。所以現在我需要知道的是恢復主窗口的正確代碼,請參閱上面的編輯2中的第一次嘗試(失敗)。 –

0

你有你的執行ShowWindow函數?

- (void)showWindow { 
    if (!self.window) { 
     [NSBundle loadNibNamed:@"MainWin" owner:self]; 
    } 

    [self.window makeKeyAndOrderFront:self]; 
} 

p.s.您的window必須不是autoreleased關閉窗口(Behavior - >Release When Closed

+0

也許也許這個我的文章可以幫助你以某種方式:http://stackoverflow.com/questions/12843616/deminiaturize-nswindow-without-making-it-key – Shebuka

+0

謝謝你試圖幫助我。根本原因似乎是一個連接或類似的,使我的NSDocument文檔不出現在窗口菜單中,因爲它爲我剛剛創建的標準的基於NSDocument的應用程序。這似乎是正確的,應該在NSDocument類中重寫,但它表示self.window,類型爲MyDocument *的類不存在getter方法。 –

相關問題