如何防止用户选择某些文件类型?

时间:2014-06-07 11:57:25

标签: objective-c macos cocoa

我想阻止用户在打开NSOpenpanel时选择一些文件类型。 我目前可以做的是阻止他访问所有文件并允许一些,但我想允许除了一些文件之外的所有文件。

NSOpenpanel*Openpane = [NSOpenpanl openpanel];
[Openpanel setAllowFileTypes(NSArray*)];

但我希望用户选择除文件之外的所有文件,而不是从所有文件中选择一些文件。

2 个答案:

答案 0 :(得分:1)

您可以通过调用[-NSOpenPanel setAllowedFileTypes:]并传入允许的文件扩展名数组来设置可接受文件类型的列表。有关详细信息,请参阅the documentation

  

文件类型可以是公共文件扩展名,也可以是UTI。 nil值表示可以使用任何文件类型。默认值为nil。

如果你想过滤掉一些文件名而不是其他文件名,我认为你可以使用NSOpenSavePanelDelegate方法-panel:shouldEnableURL:

  

对于NSOpenPanel委托,询问委托是否应在面板中启用指定的URL。

答案 1 :(得分:0)

为面板实施委托。 NSOpenPanel从其超类delegate继承NSSavePanel属性。

在委托中,实施:

- (BOOL) panel:(id)sender shouldEnableURL:(NSURL*)url;

或:

- (BOOL) panel:(id)sender validateURL:(NSURL*)url error:(NSError**)outError;

如果您可以决定是否应该快速有效地启用给定的URL,则应该使用第一个。它会经常被调用。它控制是否可以在面板中选择给定的URL。

如果您的决定很慢或需要大量CPU或I / O,则应使用第二个。仅在用户单击“打开”按钮时调用它。这不是最好的用户体验。最好是防止用户做出错误的选择,而不是让他们做出错误的选择并在最后时刻拒绝。

所有这一切都说,允许用户选择除 MP3之外的任何种文件,这有点奇怪。真的没有其他限制吗?