2

我希望用户为要保存的文件选择一个目录。我最简单的代码(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;

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

4

2 回答 2

1

实现shouldEnableURL委托方法如下:

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

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

[panel setDelegate:self];

有关 NSOpenSavePanelDelegate 协议的详细信息可以在文档中找到

于 2013-06-26T10:08:00.680 回答
0

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


 func panel(_ sender: Any, shouldEnable url: URL) -> Bool {
        if String(url.pathExtension) == "pdf" {
            return false
        }
        return true
 }
于 2020-08-21T16:36:28.287 回答