我有一个窗口(及其控制器)应阻止所有其他窗口。
因此,我想使用[NSApp runModalForWindow ..]显示窗口。

问题是谁是负责调用此方法的人:


窗口的控制器(也许我应该重写showWindow函数)。
创建控制器的对象。在那种情况下,谁应该负责调用stopModal?

最佳答案

在我的应用程序中,我有一个实现NSApplicationDelegate协议的类-如果您只是开始一个简单的项目,将会得到什么。该对象具有一个带有控件和其他控件的视图,其中一些控件可以启动对话框。因此,在需要显示应用程序模式对话框作为对控件的响应的情况下,在该控件的处理程序中(在我的NSApplicationDelegate对象中),我将调用runModalForWindow。假设我有一个从NSWindowController派生的类,名为MyDialog,对象为MyDialog * theDialog。调用看起来像:

NSResult result= [NSApp runModalForWindow:[theDialog window]];


显示的对象有责任调用abortModal,stopModal或stopModalWithCode。因此,在MyDialog类中,我可能具有“确定”按钮的处理程序和“取消”按钮的处理程序:

-(void) onOk:(id)sender
{
  [NSApp stopModal];  // Returns NSRunStoppedResponse.
  [[self window] performClose:self];
}

-(void) onCancel:(id)sender
{
  [NSApp abortModal];  // Returns NSRunAbortedResponse.
  [[self window] performClose:self];
}

10-07 18:37