5

Consider a Cocoa NSDocument that supports two document types (e.g. BMP and JPEG). While one type has no save options (e.g. BMP), the other does (e.g. compression level for JPEG).

How do you implement this?

I understand that you should override prepareSavePanel: and set the accessory view of the given NSSavePanel. However, doing this replaces the default accessory view with the document type pop-up.

Is it necessary to recreate the document type pop-up if when using a custom accessory view?

If yes, how can pass the selected document type and the additional save options to the NSDocument write methods?

If no, how can I show the additional save options (e.g. compression level) only if the corresponding document (e.g. JPEG) type has been selected? Is there a delegate method for document type changes in the NSSavePanel?

4

1 に答える 1

0

はい、このようなカスタム アクセサリ ビューが必要な場合は、すべてを提供する必要があると確信しています。残念ですが、レーダーに登録しても問題はありません。

で独自のアクセサリ ビューを提供し-prepareSavePanel:、オーバーライド-fileTypeFromLastRunSavePanelして選択したタイプを返すことができる場合があります。ただし、NSDocumentのドキュメントでは、面倒なことに、それを尊重するという約束はありません。試してみてください!

それが機能しない場合は、独自の の実装を提供する必要があるようです-runModalSavePanelForSaveOperation:delegate:didSaveSelector:contextInfo:。メソッドの Apple の説明に従ってください。

このメソッドのデフォルトの実装では、最初に Cocoa Bindings の NSEditorRegistration 非公式プロトコルを使用して登録されたエディターが変更をコミットしたことを確認し、次に保存パネルを作成し、複数のファイル タイプがある場合は標準の「ファイル形式」アクセサリ ビューを追加します。 [self shouldRunSavePanelWithAccessoryView] は YES を返し、パネルのさまざまな属性を設定し、[self prepareSavePanel:theSavePanel] を呼び出してカスタマイズの機会を提供し、パネルを表示します。ユーザーがパネルを OK すると、 -saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo: が呼び出されます。

-writableTypesForSaveOperation:doのドキュメントには次のように記載されています。

カスタム保存パネル アクセサリ ビューを作成するときにこのメソッドを呼び出して、NSDocument が標準ファイル形式のポップアップ メニューに表示するのと同じタイプのセットを簡単に表示できます。

于 2013-04-08T15:10:50.853 に答える