仅允许NSOpenPanel中的文件夹和文件

时间:2014-05-11 13:07:42

标签: objective-c macos cocoa nsopenpanel

在我的应用程序中,我需要支持文件夹和文件选择。到目前为止,我有这些设置

NSOpenPanel *openPanel = [[NSOpenPanel alloc] init];
[openPanel setAllowsMultipleSelection:YES];
[openPanel setCanChooseDirectories:YES];
[openPanel setCanCreateDirectories:NO];

但有了这个,任何人都可以选择.app个文件(实际上是文件夹)。我看到有一个选项可以设置允许的文件类型在这里不起作用,因为我需要一个通配符文件选择并且只排除特定类型。

有没有办法排除这些文件?

1 个答案:

答案 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;
}