我希望用户选择要保存的文件的目录。我最简单的代码(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;
但是,我想确保返回的路径可写,以便我可以将文件保存到其中。我该如何修改我的代码?
答案 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
}