文章目录
一、NSSavePanel
1、需要设置权限
路径:target --> capabilitys --> file access
设置 user selected file
为 read/write
。
如果不设置,会报错:
1.1 示例:打开文件夹,并保存图片到文件夹:
NSSavePanel *panel = [NSSavePanel savePanel];
panel.title = @"保存图片";
[panel setMessage:@"选择图片保存地址"];//提示文字
[panel setDirectoryURL:[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Pictures"]]];//设置默认打开路径
[panel setNameFieldStringValue:picName];
[panel setAllowsOtherFileTypes:YES];
[panel setAllowedFileTypes:@[@"jpg",@"png"]];
[panel setExtensionHidden:NO];
[panel setCanCreateDirectories:YES];
[panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
if (result == NSModalResponseOK)
{
NSString *path = [[panel URL] path];
NSData *tiffData = [self.imgView.image TIFFRepresentation];
[tiffData writeToFile:path atomically:YES];
}
}];
效果图如下:
可见,设置title不会显示;
panel 中加一个 block
// 申明 block
typedef void (^BlockDidSelectPath)(NSString *path);
...
// openPanel
- (void)saveFileWithFileName:(NSString *)fileName blockDidSelectPath:(BlockDidSelectPath)blockDidSelectPath;{
NSSavePanel *panel = [NSSavePanel savePanel];
panel.title = @"保存图片";
[panel setMessage:@"选择图片保存地址"];//提示文字
// [panel setDirectoryURL:[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Pictures"]]];//设置默认打开路径
[panel setDirectoryURL:[NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]]];//设置默认打开路径
// NSString *fileName = @"1001.txt";
[panel setNameFieldStringValue:fileName];
[panel setAllowsOtherFileTypes:YES];
[panel setAllowedFileTypes:@[@"txt",@"md"]];
[panel setExtensionHidden:NO];
[panel setCanCreateDirectories:YES];
[panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
if (result == NSModalResponseOK)
{
NSString *path = [[panel URL] path];
blockDidSelectPath(path);
}];
}
// 调用
- (void)test1{
NSString *fileName = @"";
[self saveFileWithFileName:fileName blockDidSelectPath:^(NSString *path) {
NSString *content = @"你好";
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
[data writeToFile:path atomically:YES];
}];
}
二、NSOpenPanel
1、常用的属性
在begin之前设置好即可
- CanChooseDirectories 是否可以选择目录
- AllowsMultipleSelection 是否允许多选
- AllowedFileTypes 允许选择的文件类型,如果都可以的话,就写nil
- DirectoryURL 默认打开的路径
- Prompt 默认的“打开”那两个字可以改变
2、调用示例
在按钮点击方法中,调用下面方法:
2.1 OS X 6之后
- (void)pickFile{
NSOpenPanel* panel = [NSOpenPanel openPanel];
[panel setAllowsMultipleSelection:YES]; //是否允许多选file
[panel beginWithCompletionHandler:^(NSInteger result) {
if (result == NSOKButton) {
NSMutableArray* filePaths = [[NSMutableArray alloc] init];
for (NSURL* elemnet in [panel URLs]) {
[filePaths addObject:[elemnet path]];
}
NSLog(@"filePaths : %@",filePaths);
}
}];
}
2.2 OS X 6之前
- (void)openFinder{
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setCanChooseFiles:YES]; //是否能选择文件file
[panel setCanChooseDirectories:YES]; //是否能打开文件夹
[panel setAllowsMultipleSelection:YES]; //是否允许多选file
NSInteger finded = [panel runModal]; //获取panel的响应
if (finded == NSFileHandlingPanelOKButton) {
// NSFileHandlingPanelCancelButton = NSModalResponseCancel; NSFileHandlingPanelOKButton = NSModalResponseOK,
for (NSURL *url in [panel URLs]) {
NSLog(@"文件路径--->%@",url);
//同时这里可以处理你要做的事情 do something
}
}
}
保存文件可使用 NSSavePanel