我試圖添加一個菜單項以顯示主窗口。當窗口未被最小化或關閉(黃色和紅色的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)用標準應用程序中的窗口菜單替換我的「損壞的」窗口菜單(如果是這種情況),該窗口菜單的行爲與預期相同?
感謝您的回答!它沒有被釋放。將它連接到另一個方法是行不通的,因爲還有一個障礙:窗口不能被最小化/關閉以便調用該方法。 –
您的方法是否通過主菜單中的First Responder對象連接?如果是,那麼它應該工作。 – TheAmateurProgrammer
這是一個快速響應:)好吧,正如我上面解釋的那樣,當主窗口正常時調用它,但在最小化或關閉時調用它。我在mainmenu.xib中有一個NSApplicationDelegate對象,並聲明它即使在最小化時也會調用它。所以現在我需要知道的是恢復主窗口的正確代碼,請參閱上面的編輯2中的第一次嘗試(失敗)。 –