在工作表可见时允许应用终止

时间:2011-03-19 02:08:55

标签: cocoa macos

我有一张附在我主窗口上的表格。这是一个登录表,在完成之前不应允许与应用程序进行任何交互(默认为模态)。但是,我希望用户能够终止该应用程序。 IE,他们意识到他们需要登录,放弃并想要关闭应用程序。默认行为是播放NSBeep并继续运行。我怎样才能覆盖这个?

3 个答案:

答案 0 :(得分:6)

从10.6开始,您可以控制模态表是否应该阻止应用程序终止。这应该这样做:

[myModalSheet setPreventsApplicationTerminationWhenModal:NO];

答案 1 :(得分:1)

听起来问题的根源在于您依靠工作表来阻止与应用程序的其余部分进行交互。您有效地在视图中存储应用程序状态信息(登录/未登录),这不是一个好的计划。

工作表应该允许用户输入他们的登录信息,登录表的控制器应该在输入信息时更新应用程序的状态。如果采用这种方法,应用程序将不允许用户执行任何需要登录的操作,直到登录过程实际完成,无论工作表是否存在。

答案 2 :(得分:0)

如果您在显示工作表后立即致电endSheet:,则会显示我正在寻找的行为。

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

这不会消除工作表,完成后,您可以使用[window orderOut:nil];隐藏工作表。