如何在NSOpenPanel中限制可写目录选择?

时间:2013-06-26 09:56:42

标签: macos cocoa directory nsopenpanel

我希望用户选择要保存的文件的目录。我最简单的代码(ARC):

NSOpenPanel *panel = [NSOpenPanel openPanel];

[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:NO];
[panel setAllowsMultipleSelection:NO];

if (NSOKButton == [panel runModal]) 
    return [[panel URLs] objectAtIndex:0];
else
    return nil;

但是,我想确保返回的路径可写,以便我可以将文件保存到其中。我该如何修改我的代码?

2 个答案:

答案 0 :(得分:1)

实施shouldEnableURL委托方法,如下所示:

- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url
{
    return [[NSFileManager defaultManager] isWritableFileAtPath:[url path]];
}

这将在打开的面板中将所有不可写路径呈现为不可选择。 充当面板代表的对象应符合NSOpenSavePanelDelegate 不要忘记通过以下方式设置:

[panel setDelegate:self];

有关NSOpenSavePanelDelegate协议can be found in the docs的详细信息。

答案 1 :(得分:0)

在Swift中,您可以通过实现shouldEnable url委托方法来限制特定类型。


 func panel(_ sender: Any, shouldEnable url: URL) -> Bool {
        if String(url.pathExtension) == "pdf" {
            return false
        }
        return true
 }