我有一个窗口(及其控制器)应阻止所有其他窗口。
因此,我想使用[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];
}