在導航服務世界中,您可以指定kNavDontConfirmReplacement
作爲創建NavDialogRef
的選項,該選項不會要求用戶在使用已存在的文件名進行保存時確認替換文件。我如何指定與Cocoa NSSavePanel
等效的行爲?NSSavePanel:壓制「確認替換?」對話框
回答
下面是它如何可以做到:
- 添加一個委託來處理NSSavePanel回調
- 覆蓋
- (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag
在您的代理 - 在委託:
- 如果
okFlag
是false
,回報filename
- 否則,保留
filename
作爲您的代理一個NSString*
- 返回一些獨特的字符串,它是極不可能是一個實際的文件名
- 如果
- 當
NSSavePanel
回到你的代碼,從您的委託方法拉文件名的值,並丟棄無論文件名NSSavePanel
告訴你(這應該是你唯一的字符串)。
由於userEnteredFilename:
由OS稱爲確認替換檢查,纔給你一個機會,以獲取用戶指定的內容而不讓OS上的祕密。唯一的字符串將確保確認替換對話框不會意外彈出。
毛重但有效。
請注意,文件名可能包含斜槓。保存面板的默認行爲似乎是將它們轉換爲冒號。 – George 2015-07-10 04:31:25
這似乎違背了人機界面準則,不會打破用戶的期望。必須有一種方法來做到這一點是正確的(即不太嚴重)的方式。 非常漂亮的想法順便說一句 – 2016-07-29 23:32:03
不,沒有簡單的方法可以用NSSavePanel來做到這一點。從理論上講,你可以用一個類別來擴展NSSavePanel並覆蓋某些私有方法。儘管我看了一下,但沒有什麼簡單的。
在這裏使用覆蓋做一些討論: http://www.cocoadev.com/index.pl?DisableAlertBoxInNSSavePanel – 2009-12-21 15:07:34
當您遇到NSSavePanel時,您的客戶將會期待確切的確認提示,所以請不要對其進行自定義。
我不確定你正在計劃什麼樣的自定義確認覆蓋對話框,但我可以建議你改用NSOpenPanel,並用「創建新文件」按鈕來定製這個對話框? (我相信你可以通過setAccessoryView API來做到這一點。)
例如,如果你要求你的客戶選擇一個文件來追加新數據,NSOpenPanel將工作得很好;如果客戶想要將新數據保存到新文件(而不是附加到現有文件),則「創建新文件」按鈕只是一個額外的點擊。
- 1. jQueryUI對話框替換確認?
- 2. NSSavePanel取消確認
- 3. 確認對話框
- 4. 確認對話框
- 5. 確認對話框
- 6. 使用jQuery提交表單確認對話框替換
- 7. 用jQuery對話框替換確認javascript函數
- 8. JS - 定製「確認」對話框
- 9. 定製確認並警告對話框
- 10. 使用Javascript - 自定義確認對話框 - 更換JS確認
- 11. 消息/確認對話框
- 12. JOptionPane確認對話框
- 13. GWT確認對話框
- 14. Ajax.ActionLink並確認對話框
- 15. JQuery確認對話框
- 16. Javascript確認對話框 - ASP.NET
- 17. jQuery UI選項卡和對話框 - 如何確認基於對話框插件確認切換選項卡?
- 18. 確認對話
- 19. 的Javascript替代確認()對話框,不是異步
- 20. 如何在Jquery UI對話框中實現「確認」對話框?
- 21. jquery對話框問題 - 通過對話框替換警報
- 22. 使用FancyBox刪除確認對話框
- 23. 確認對話框效果不佳
- 24. 在javascript中確認模態對話框
- 25. MATLAB:確認輸入對話框?
- 26. JavaScript確認對話框不斷出現
- 27. 如何處理webview確認對話框?
- 28. 確認對話框不起作用
- 29. 從Silverlight崩潰確認對話框firefox
- 30. 確認Materialise.js中的對話框
你能解釋一下你爲什麼要這樣做嗎? – 2009-12-19 11:01:48
我想用我自己的confirm-overwrite對話框替換它。 – fbrereto 2009-12-19 15:38:44