2013-03-12 37 views
4

考慮支持兩種文檔類型(例如BMP和JPEG)的Cocoa NSDocument。雖然一種類型沒有保存選項(例如BMP),但另一種類型(例如JPEG的壓縮級別)。NSDocument的NSSavePanel的自定義附件視圖

你如何實現這個?

我知道您應該覆蓋prepareSavePanel:並設置給定NSSavePanel的附件視圖。但是,這樣做會用文檔類型彈出窗口替換默認的附件視圖。

如果使用自定義附件視圖時是否需要重新創建文檔類型彈出窗口?

如果是,如何將選定的文檔類型和附加保存選項傳遞給NSDocument寫入方法?

如果否,只有在選擇了相應的文檔(例如JPEG)類型後,如何顯示其他保存選項(例如壓縮級別)? NSSavePanel中是否有文檔類型更改的委託方法?

回答

0

我很肯定是的,如果你想要一個像這樣的自定義配件視圖,你必須提供整個事情。這是一個恥辱 - 但是在提交雷達時沒有任何傷害!

您可以在-prepareSavePanel:中提供自己的附件視圖,然後覆蓋-fileTypeFromLastRunSavePanel以返回所選類型。然而,NSDocument的文檔沒有作出任何承諾,它會尊重,惱人地。試試看看!

如果這不起作用,它看起來像你需要提供你自己的實現-runModalSavePanelForSaveOperation:delegate:didSaveSelector:contextInfo:。按照蘋果公司的方法的​​描述:

此方法的默認實現首先確保任何編輯器使用Cocoa綁定NSEditorRegistration非正式協議,承諾其變動登記,然後創建一個保存面板,增加了一個標準的「文件格式「附件視圖,如果有多個文件類型供用戶選擇,並且[self shouldRunSavePanelWithAccessoryView]返回YES,則設置面板的各種屬性,調用[self prepareSavePanel:theSavePanel]以提供定製機會,然後顯示面板。如果用戶確定面板-saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:將被調用。

該文檔爲-writableTypesForSaveOperation:做筆記:

創建自定義保存面板附件以很容易地提供一組相同的類型時,可以調用此方法是NSDocument會在它的標準文件格式彈出菜單。