4

在导航服务世界中,可以指定kNavDontConfirmReplacement一个选项来创建一个NavDialogRef在使用已经存在的文件名保存时不会要求用户确认替换文件的选项。如何使用 Cocoa 指定等效行为NSSavePanel

4

3 回答 3

4

Here's how it can be done:

  1. Add a delegate to handle NSSavePanel callbacks
  2. Override - (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag in your delegate
  3. In the delegate:
    1. If okFlag is false, return filename
    2. Otherwise, retain filename as an NSString* in your delegate
    3. Return some unique string that is highly unlikely to be the name of an actual file
  4. When NSSavePanel returns to your code, pull the value of filename from your delegate method, and discard whatever filename NSSavePanel told you (which should be your unique string).

Since userEnteredFilename: is called by the OS before the confirm-replace check is made it gives you a chance to get what the user specified without letting the OS in on the secret. The unique string will assure that the confirm-replace dialog is not popped accidentally.

Gross but efficacious.

于 2010-03-06T00:08:22.803 回答
0

不,没有简单的方法可以使用 NSSavePanel 做到这一点。理论上,您可以使用类别扩展 NSSavePanel 并覆盖某些私有方法。不过,我快速浏览了一下,并没有什么简单的。

于 2009-12-21T14:54:42.160 回答
0

您的客户在面对 NSSavePanel 时会期待准确的确认警报,因此不要自定义它。

我不确定您计划使用哪种自定义的确认覆盖对话框,但我是否建议您改用 NSOpenPanel,并使用“创建新文件”按钮自定义此对话框?(我相信你可以通过 setAccessoryView API 做到这一点。)

例如,如果您要求您的客户选择一个文件来附加新数据,那么 NSOpenPanel 会很好地工作;如果客户想要将新数据保存到新文件(而不是附加到现有文件),只需单击“创建新文件”按钮即可。

于 2009-12-22T05:36:45.917 回答