在我的应用程序中,我需要支持文件夹和文件选择。到目前为止,我有这些设置
NSOpenPanel *openPanel = [[NSOpenPanel alloc] init];
[openPanel setAllowsMultipleSelection:YES];
[openPanel setCanChooseDirectories:YES];
[openPanel setCanCreateDirectories:NO];
但有了这个,任何人都可以选择.app
个文件(实际上是文件夹)。我看到有一个选项可以设置允许的文件类型在这里不起作用,因为我需要一个通配符文件选择并且只排除特定类型。
有没有办法排除这些文件?
答案 0 :(得分:2)
使用NSOpenSavePanelDelegate
的{{3}}。在此内部使用NSURL获取UTI并根据您接受的类型列表进行检查。 - (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url
。您还可以否定排除不受支持的类型的逻辑,无论哪种更适合您的应用以及您的用户期望的内容。如果您可以足够快地评估文件,您甚至可以打开它,然后在Panel中启用或禁用它。
- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url
NSString* itemUTI = nil;
NSError* outErr = nil;
BOOL showInPanel = NO;
BOOL success = [url getResourceValue:&itemUTI NSURLTypeIdentifierKey error:&outErr];
if ( ! success || nil == itemUTI) {
// handle failure
} else {
showInPanel = UTTypeConformsTo(itemUTI, kUTTypeData) || UTTypeConformsTo(itemUTI, kUTTypeFolder);
}
return showInPanel;
}