Cocoa中的自定义下拉窗口/对话框

时间:2015-03-25 22:15:03

标签: objective-c cocoa modal-dialog panel

Cocoa中对话窗口有哪些替代方案?我需要创建一个自定义对话框(模态),用户可以在其中输入一些信息,当他/她按下OK时,我的应用程序将关闭此对话框并处理输入。 基本上,当你添加一个新文件(命令+ N)时,我需要像Xcode中的下拉窗口一样: [发布截图的声誉不够] 到目前为止,我所发现的只是一些旧的列表和主题,人们说它被称为表。但建议的方法似乎已被弃用,如

beginSheet: myCustomSheet
            modalForWindow: window
            modalDelegate: self
            didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
            contextInfo: nil

还有其他方法吗? 例如,我可以使用自己的xib文件创建一个单独的窗口,是否有某种设置使其成为“面板”或“工作表”?我对这些条款感到有点困惑。

1 个答案:

答案 0 :(得分:0)

你想要的是一张"表"。工作表是一个窗口,它连接到另一个窗口并阻止它附加到窗口的大多数输入。

面板只是一种特定的窗口。 NSPanelNSWindow的子类。它有一些不同的行为和可能的风格。您可以将面板用作工作表,但您不必这样做,并且它没有太大的区别。

请注意,工作表是窗口模式,而不是应用程序模式。也就是说,它可以防止用户使用附加的窗口执行其他操作,但不会阻止用户在应用程序的菜单或其他窗口中执行操作。其中隐含的是工作表以异步方式运行。您开始工作表,然后继续执行,而工作表的工作尚未完成。然后,您应该通常允许执行流程返回到主事件循环。工作表完成后,它将调用您指定的一些代码。

如果您需要同步行为,请改用app-modal对话框。

用于展示工作表的现代API是-[NSWindow beginSheet:completionHandler:]。您将该消息发送到" normal"窗口(例如文档窗口)。第一个参数是作为工作表的窗口。完成处理程序是工作表完成时要运行的代码。

工作表中的控件通常会将其操作定位到工作表的窗口控制器(就像使用任何其他窗口一样)。在操作方法中,您可以在父窗口上调用-[NSWindow endSheet:]-endSheet:returnCode:来完成工作表并确定传递给完成处理程序的结果代码。您可以使用sheetParent属性获取父窗口。