Cocoa NSSavePanel:压制“保存面板”;确认更换?“;对话
在Nav服务世界中,可以指定Cocoa NSSavePanel:压制“保存面板”;确认更换?“;对话,cocoa,macos,nssavepanel,Cocoa,Macos,Nssavepanel,在Nav服务世界中,可以指定knavontconfirmReplacement作为创建NavDialogRef的选项,该选项在使用已存在的文件名保存时不会要求用户确认文件的替换。如何使用CocoaNSSavePanel指定等效行为?不,使用NSSavePanel没有简单的方法。理论上,您可以使用一个类别扩展NSSavePanel,并覆盖某些私有方法。不过,我快速查看了一下,这一点并不简单。您的客户在面对NSSavePanel时会期望得到准确的确认警报,所以不要自定义它 我不确定您计划使用哪种自定
knavontconfirmReplacement
作为创建NavDialogRef
的选项,该选项在使用已存在的文件名保存时不会要求用户确认文件的替换。如何使用CocoaNSSavePanel
指定等效行为?不,使用NSSavePanel没有简单的方法。理论上,您可以使用一个类别扩展NSSavePanel,并覆盖某些私有方法。不过,我快速查看了一下,这一点并不简单。您的客户在面对NSSavePanel时会期望得到准确的确认警报,所以不要自定义它
我不确定您计划使用哪种自定义的确认覆盖对话框,但我是否可以建议您使用NSOpenPanel,并使用“创建新文件”按钮自定义此对话框?(我相信您可以通过setAccessoryView API实现这一点。)
例如,如果您要求您的客户选择一个要向其中添加新数据的文件,NSOpenPanel将非常有效;如果客户希望将新数据保存到新文件中(而不是附加到现有文件中),则“创建新文件”按钮只需再单击一次即可。以下是操作方法:
-(NSString*)面板:(id)发件人用户输入的文件名:(NSString*)文件名已确认:(BOOL)代理中的okFlag
okFlag
为false
,则返回filename
filename
作为NSString*
保留在代理中NSSavePanel
返回到您的代码时,从委托方法中提取filename的值,并放弃filenameNSSavePanel
告诉您的任何内容(这应该是您的唯一字符串)userEnteredFilename:
,因此您有机会获得用户指定的内容,而不让操作系统知道该秘密。唯一的字符串将确保确认替换对话框不会意外弹出
粗俗但有效。您能解释一下为什么要这样做吗?我想用我自己的“确认覆盖”对话框替换它。可以劫持未记录的API
-(BOOL)\u覆盖现有的文件检查:(id)arg1代码>和/或-(BOOL)\您应该发出文件覆盖警报:(id)arg1
并返回NO
。但对沙盒应用程序不起作用。@Eljay你是冠军!关于使用覆盖的一些讨论如下:注意文件名可能包含斜杠。“保存”面板的默认行为似乎是将它们转换为冒号。这似乎与人机界面指南相反,不违背用户的期望。必须有一种正确的方法来做这件事。非常圆滑的想法顺便说一句