- 谁应该负责调用runModalForWindow - 控制器或启动控制器的控制器

时间:2011-06-20 07:47:16

标签: objective-c cocoa macos

我有一个窗口(带有控制器),应该阻止所有其他窗口。 出于这个原因,我想使用[NSApp runModalForWindow ..]显示窗口。

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

  1. 窗口的控制器(也许我应该覆盖showWindow函数)。
  2. 创建控制器的对象。在这种情况下,谁应该负责调用stopModal?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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