MacOS 开发 - NSOpenPanel & NSSavePanel 保存文件、打开文件夹


一、NSSavePanel

1、需要设置权限

路径:target --> capabilitys --> file access
设置 user selected fileread/write

在这里插入图片描述


如果不设置,会报错:
file access error


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];
        }
    }];
    

效果图如下:
NSSavePanel

可见,设置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


三、参考资料:

NSBeidou:http://www.jianshu.com/p/9a413adbd9b8

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI工程仔

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值