NSSavePanel:压制"确认替代?"对话
-
20-09-2019 - |
题
在导航服务世界的一个可能指定 kNavDontConfirmReplacement
作为一个选项,以创建一个 NavDialogRef
这不会要求用户确认该替换的文件保存时文件名称中已经存在。我怎么指定一个等效行为与可可 NSSavePanel
?
解决方案
这里是它如何可以做到:
- 增加的委托处理NSSavePanel回调
- 重写
- (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag
在你的委托 - 在委托:
- 如果
okFlag
是false
, 返回filename
- 否则,保留
filename
作为一个NSString*
在你的委托 - 返回的一些独特的串,是极不可能的姓名的一个实际的文件
- 如果
- 时
NSSavePanel
返回到代码,拉价值的文件从你的委派方法,并放弃任何文件NSSavePanel
告诉你,(这应该是你唯一的string)。
由于 userEnteredFilename:
被称为操作系统之前,确认-取代检查它给你一个机会,以获得什么样的用户指定的,而不会让操作系统上的秘密。唯一串将确保确认-取代对话是不出意外。
总而有效。
其他提示
没有,有没有简单的方法与NSSavePanel做到这一点。从理论上讲,你可以用一个类别扩展NSSavePanel并覆盖某些私有方法。我刚刚看了一下,但并没有什么简单的有关情况。
您的客户会期待确切确认警报当遇到NSSavePanel,所以不自定义它。
我不知道什么样的你打算定制确认重写的对话框,但我可能会建议你使用NSOpenPanel代替,并自定义此对话框中有“新建文件”按钮? (我相信你可以通过setAccessoryView API做到这一点。)
例如,如果你问你的客户选择一个文件,以新数据添加到时,NSOpenPanel会工作得很好;如果客户希望将新的数据保存到一个新文件(而不是附加到现有文件),“创建新文件”按钮只是另一次点击。
不隶属于 StackOverflow