gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:20:43 25 4
gpt4 key购买 nike

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

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

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

最佳答案

你想要的是一张“表”。工作表是一个附加到另一个窗口的窗口,它会阻止对其附加的窗口的大多数输入。

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

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

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

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

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

关于objective-c - Cocoa 中的自定义下拉窗口/对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com