NSSavePanel:确定“确认替换?”对话框

在导航服务世界中,可以指定
kNavDontConfirmReplacement
作为创建
NavDialogRef
的选项,在使用已存在的文件名保存时,不会要求用户确认替换文件。如何使用Cocoaѭ2指定等效行为?     
已邀请:
以下是它的完成方式: 添加委托以处理NSSavePanel回调 在你的代表中覆盖
- (NSString*)panel:(id)sender userEnteredFilename:(NSString*)filename confirmed:(BOOL)okFlag
在代表中: 如果
okFlag
false
,则返回
filename
否则,在你的代表中保留
filename
作为
NSString*
返回一些非常不可能是实际文件名称的唯一字符串 当
NSSavePanel
返回到你的代码时,从你的委托方法中提取文件名的值,并丢弃
NSSavePanel
告诉你的任何文件名(应该是你唯一的字符串)。 由于操作系统在进行确认替换检查之前调用了
userEnteredFilename:
,因此它使您有机会获得用户指定的内容,而不会让操作系统知道秘密。唯一字符串将确保不会意外弹出确认替换对话框。 总而有效。     
不,使用NSSavePanel没有简单的方法。理论上,您可以使用类别扩展NSSavePanel并覆盖某些私有方法。我快速浏览了一下,没有什么简单的。     
当您面对NSSavePanel时,您的客户会期望确切的确认提醒,因此请勿对其进行自定义。 我不确定您正在计划什么样的自定义确认覆盖对话框,但我可能建议您使用NSOpenPanel,并使用“创建新文件”按钮自定义此对话框? (我相信你可以通过setAccessoryView API来做到这一点。) 例如,如果您要求客户选择要附加新数据的文件,NSOpenPanel将会很好地工作;如果客户想要将新数据保存到新文件(而不是附加到现有文件),则“创建新文件”按钮只是一个额外的点击。     

要回复问题请先登录注册