2009-07-07 79 views
0

在我的第一個Cocoa應用程序中,我只有一個窗口,其中有2個NSTextField實例 - 用於用戶文本輸入和輸出文本處理。NSWindow代表(windowShouldClose)

如果我的用戶點擊左上角的紅色x,窗口關閉,但應用程序仍在運行,圖標停留在擴展塢 - 正常的Mac行爲。

當用戶雙擊Dock或桌面上的圖標時,這不會重新打開窗口 - 顯然也是正常的Mac行爲,但會讓用戶感到困惑。

要使應用程序恢復運行狀態,用戶必須強制從主菜單或上下文菜單中退出,並通過單擊其中一個圖標重新啓動應用程序。

我搜索蘋果文檔和論壇,以及它似乎是以下應防止窗口關閉(我的第一選擇:隱藏寡婦,因此它可以在以後重新打開):

  1. 添加一個委託到NSApp

  2. 委託實現-applicationShouldHandleReopen它調用[mainWindow makeKeyAndOrderFront:self];返回TRUE

  3. 委託實現-windowShouldClose返回FALSE 然而,儘管-windowShouldClose被調用時,窗口將關閉。

我在這裏錯過了什麼?

作爲替代(我的第二偏好),I加入到委託

  • -applicationShouldTerminateAfterLastWindowClosed它返回YES
  • 這工作,即,在應用程序關閉時點擊紅色的x, ,用戶可以稍後重新啓動應用程序。

    澄清和指向特定的文檔和工作代碼示例將不勝感激。

    魯迪

    回答

    2

    「當用戶在Dock或桌面上雙擊圖標時,這不會重新打開窗口 - 顯然也是正常的Mac行爲,但會讓用戶感到困惑。」

    如果您希望窗口在此情況下重新打開,請執行applicationShouldHandleReopen:hasVisibleWindows:。當用戶在關閉所有窗口後單擊停靠欄圖標時,沒有任何關於打開窗口的un-mac功能;很多應用程序都會這樣做,並且委託專門存在以支持該行爲。

    +0

    是的,我同意像這樣重新開放是另一種偉大的Mac式的方法。當然,這取決於他的應用程序。如果它是一個基於文檔的應用程序,那麼保持應用程序運行並重新處理是最好的(一個TextEdit)。如果它是一個小型的實用程序應用程序,我會說關閉它,並讓用戶重新啓動應用程序。 – kperryua 2009-07-07 19:19:49

    1

    首先,終止於窗口關閉的應用程序的「另類」行爲可能是您的情況是首選的方法。用戶在無法關閉窗口時可能會感到困惑。

    如果您確實想阻止窗口關閉,爲什麼不直接禁用IB窗口的關閉控制呢?

    +0

    按照你的建議,我禁用了IB的密切控制。 現在紅色的x變灰了,用戶只能用橙色的' - '按鈕最小化應用窗口,或者用Quit關閉應用。 這對用戶來說很清楚。 – rudifa 2009-07-07 21:11:32