objective-c - - 谁应该负责调用 runModalForWindow - Controller 或初始化 Controller 的人

标签 objective-c cocoa macos

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

问题是谁负责调用这个方法:

  1. 窗口的 Controller (也许我应该重写 showWindow 函数)。
  2. 创建 Controller 的对象。那么,谁应该负责调用 stopModal?

最佳答案

在我的应用程序中,我有一个实现 NSApplicationDelegate 协议(protocol)的类 - 如果您刚刚开始一个简单的项目,您会得到什么。该对象有一个带有控件等的 View ,其中一些控件可以启动对话框。因此,在我需要显示应用程序模式对话框作为对控件的响应的情况下,在该控件的处理程序中(在我的 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];  
}  

关于objective-c - - 谁应该负责调用 runModalForWindow - Controller 或初始化 Controller 的人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6408188/

相关文章:

objective-c - 使用正则表达式拆分字符串 - objective-C

iphone - 我们可以在最后更改 iphone 项目的 bundle 显示名称吗?

ios - .xib 文件名在创建包时更改为 ~iphone.nib

ios - 在 iOS 7/iOS 8 中设置 UILabel 文本样式的最简单方法

iphone - cocoa touch 显示屏 多种货币

swift - NSImage 到 Base64 字符串丢失质量

cocoa - 为什么我的 NSMutableArray 返回 null?

c - C/C++ 代码中错误的 eclipse 警告下划线

macos - Mac 和 FreeBSD 上的 Java 8 不同的文件按修改数据排序顺序

c++ - 在 Mac OS X 中创建虚拟 USB 设备