【问题标题】:Allow only folders and files in NSOpenPanel仅允许 NSOpenPanel 中的文件夹和文件
【发布时间】:2014-05-11 13:07:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: objective-c macos cocoa nsopenpanel


    【解决方案1】:

    使用NSOpenSavePanelDelegate 中的- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url 。在此使用 NSURL 获取 UTI 并根据您接受的类型列表检查它。 Full List of UTI-Types。您还可以否定排除不支持类型的逻辑,以更适合您的应用程序和用户期望的方式为准。如果您可以足够快地评估文件,您甚至可以打开它,然后在面板中启用或禁用它。

    - (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;
    }
    

    【讨论】:

    • @user88975 我的回答对你有帮助吗?如果是,您是否愿意使用左侧的复选标记将其标记为已接受?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2013-04-28
    • 2015-01-14
    相关资源
    最近更新 更多