Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocoa中的自定义下拉窗口/对话框_Objective C_Cocoa_Modal Dialog_Panel - Fatal编程技术网

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

Objective c Cocoa中的自定义下拉窗口/对话框,objective-c,cocoa,modal-dialog,panel,Objective C,Cocoa,Modal Dialog,Panel,Cocoa中的对话窗口有哪些替代方案?我需要创建一个自定义对话框(模式),用户将能够输入一些信息,当他/她按下OK时,我的应用程序将关闭此对话框并处理输入。 因此,本质上,当您添加新文件时,我需要类似于Xcode中的下拉窗口(command+N): [声誉不足,无法发布截图] 到目前为止,我所发现的只是一些旧的列表和主题,人们称之为工作表。但所建议的方法似乎不受欢迎,比如 beginSheet: myCustomSheet modalForWindow: window

Cocoa中的对话窗口有哪些替代方案?我需要创建一个自定义对话框(模式),用户将能够输入一些信息,当他/她按下OK时,我的应用程序将关闭此对话框并处理输入。 因此,本质上,当您添加新文件时,我需要类似于Xcode中的下拉窗口(command+N): [声誉不足,无法发布截图] 到目前为止,我所发现的只是一些旧的列表和主题,人们称之为工作表。但所建议的方法似乎不受欢迎,比如

beginSheet: myCustomSheet
            modalForWindow: window
            modalDelegate: self
            didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
            contextInfo: nil
还有别的办法吗? 例如,我可以用自己的xib文件创建一个单独的窗口,是否有某种设置使其成为“面板”或“工作表”?我对这些术语有点困惑。

你想要的是一张“工作表”。图纸是一个连接到另一个窗口的窗口,它会阻止连接到该窗口的大多数输入

面板只是一种特定类型的窗口
NSPanel
NSWindow
的一个子类。它有一些不同的行为和可能的风格。您可以将面板用作图纸,但不必这样做,也没有多大区别

请注意,图纸是窗口模式,而不是应用程序模式。也就是说,它可以阻止用户在其所连接的窗口中执行其他操作,但不能阻止用户在应用程序的菜单或其他窗口中执行操作。这意味着工作表是异步操作的。开始工作表,然后继续执行,而工作表的工作尚未完成。然后,通常应该允许执行流返回到主事件循环。当工作表完成时,它将调用您指定的一些代码

如果需要同步行为,请改用应用程序模式对话框

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


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

谢谢您的回答,现在更清楚了。谢谢你的帮助。