NSDocument 的 NSSavePanel 的自定义附件视图

hpi*_*que 5 macos cocoa nsdocument nssavepanel

考虑一个NSDocument支持两种文档类型(例如 BMP 和 JPEG)的 Cocoa 。虽然一种类型没有保存选项(例如 BMP),但另一种类型有(例如 JPEG 的压缩级别)。

你如何实现这一点?

我知道您应该覆盖prepareSavePanel:并设置给定NSSavePanel. 但是,这样做会用文档类型弹出窗口替换默认的附件视图。

如果使用自定义附件视图,是否需要重新创建文档类型弹出窗口?

如果是,如何将选定的文档类型和附加保存选项传递给NSDocument写入方法?

如果没有,只有在选择了相应的文档(例如 JPEG)类型时,我如何才能显示其他保存选项(例如压缩级别)?中是否有用于文档类型更改的委托方法NSSavePanel

Mik*_*lah 1

我非常确定,是的,如果您想要像这样的自定义附件视图,您必须提供整个内容。真可惜\xe2\x80\x94\xc2\xa0但是归档雷达没有什么坏处!

\n\n

可以提供您自己的附件视图-prepareSavePanel:,然后覆盖-fileTypeFromLastRunSavePanel以返回所选类型。然而,NSDocument令人烦恼的是,它的文档没有承诺它会尊重这一点。尝试一下看看!

\n\n

如果这不起作用,那么您似乎需要提供自己的-runModalSavePanelForSaveOperation:delegate:didSaveSelector:contextInfo:. 请遵循Apple对该方法的描述:

\n\n
\n

此方法的默认实现首先确保使用 Cocoa Bindings\' NSEditorRegistration 非正式协议注册的任何编辑器已提交其更改,然后创建一个保存面板,如果有多个文件类型,则添加一个标准“文件格式”附件视图用户从中进行选择,并且 [self shouldRunSavePanelWithAccessoryView] 返回 YES,设置面板的各种属性,调用 [selfprepareSavePanel:theSavePanel] 以提供自定义机会,然后呈现面板。如果用户确定,则调用面板 -saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo: 。

\n
\n\n

的文档请-writableTypesForSaveOperation:注意:

\n\n
\n

您可以在创建自定义保存面板附件视图时调用此方法,以轻松呈现与 NSDocument 在其标准文件格式弹出菜单中相同的类型集。

\n
\n