首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSOpenPanel限制对某些文件夹的访问

使用NSOpenPanel限制对某些文件夹的访问
EN

Stack Overflow用户
提问于 2011-04-15 21:45:35
回答 2查看 2.7K关注 0票数 5

我使用NSOpenPanel允许用户选择要将文档保存到的文件夹。我想限制他们可以保存到哪个文件夹中(就层次结构而言)。基本上,我想阻止他们选择上面的任何文件夹:

/用户/用户名/

所以文件夹

/用户/用户名/猫/

是可以接受的但是

/用户/用户名/

/应用程序/cats/

是不会被允许的。我想知道如何实施这个限制。

谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2011-04-15 22:21:51

注意,NSOpenPanel继承了NSSavePanel,而NSSavePanel又定义了一个委托和相应的委托协议NSOpenSavePanelDelegate。您可以使用委托扩展打开面板的行为,以便包括您在问题中列出的限制。

例如,假设应用程序委托实现了开放面板限制,使其符合NSOpenSavePanelDelegate协议:

代码语言:javascript
复制
@interface AppDelegate : NSObject <NSApplicationDelegate, NSOpenSavePanelDelegate>
@end

在应用程序委托的实现中,告诉打开的面板,应用程序委托充当打开的面板委托:

代码语言:javascript
复制
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setDirectory:NSHomeDirectory()];
[openPanel setCanChooseDirectories:NO];
[openPanel setDelegate:self];
[openPanel runModal];

并实现以下委托方法:

代码语言:javascript
复制
- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url {
    NSString *path = [url path];
    NSString *homeDir = NSHomeDirectory();

    return [path hasPrefix:homeDir] && ! [path isEqualToString:homeDir];
}

- (void)panel:(id)sender didChangeToDirectoryURL:(NSURL *)url {
    NSString *path = [url path];
    NSString *homeDir = NSHomeDirectory();

    // If the user has changed to a non home directory, send him back home!
    if (! [path hasPrefix:homeDir]) [sender setDirectory:homeDir];
}

- (BOOL)panel:(id)sender validateURL:(NSURL *)url error:(NSError **)outError {
    NSString *path = [url path];
    NSString *homeDir = NSHomeDirectory();

    if (![path hasPrefix:homeDir]) {
        if (outError)
           *outError = ; // create an appropriate NSError instance

        return NO;    
    }
    return YES;
}
票数 16
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5682666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档