2011-03-19 58 views
3

我有一張工作表連接到我的主窗口。這是一個登錄表,在完成之前不應允許與應用程序進行任何交互(默認情況下爲模態)。但是,我希望用戶能夠終止該應用程序。 IE瀏覽器,他們意識到他們需要登錄,放棄,並希望關閉應用程序。默認行爲是播放NSBeep並繼續運行。我怎樣才能覆蓋這個?允許應用程序在工作表可見時終止

回答

0

如果您在顯示錶格後立即致電endSheet:,它會顯示我正在查找的行爲。

[NSApp beginSheet:self._loginController.window 
    modalForWindow:self.window 
    modalDelegate:nil 
    didEndSelector:nil 
     contextInfo:NULL]; 
[NSApp endSheet:self._loginController.window]; 

這不會關閉該表,當你完成,你可以用[window orderOut:nil];隱藏工作表。

1

聽起來像問題的根源在於你依靠工作表來防止與應用程序的其他部分進行交互。您在視圖中有效存儲應用程序狀態信息(登錄/未登錄),這不是一個好計劃。

表格應該允許用戶輸入他們的登錄信息,並且登錄表的控制器應該在輸入信息時更新應用程序的狀態。如果採取這種方法,應用程序將不允許用戶執行任何需要登錄才能完成登錄過程的任何事情,無論該表單是否在該表單中。

+0

這根本不是問題。這並不是說與應用程序的其他部分進行交互會產生破壞性,而只會造成非生產性並可能造成混淆。 – 2011-03-19 14:24:45

+7

好的。考慮在表上調用'-setPreventsApplicationTerminationWhenModal:NO',然後。 – Caleb 2011-03-19 17:32:16

+1

我希望有一種方法可以將Caleb的評論標記爲已接受的修復程序。這正是我需要的功能。 (順便說一下,允許它的主要原因之一是,如果沒有它,你的應用程序將阻止關閉過程完成) – 2013-02-20 02:22:46

5

從10.6開始,您可以控制模式表是否應該阻止應用程序終止。這應該這樣做:

[myModalSheet setPreventsApplicationTerminationWhenModal:NO]; 
相關問題