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

版权声明:本文为博主原创文章,转载请附上本文链接地址。from : https://blog.csdn.net/lovechris00 https://blog.csdn.net/lovechris00/article/details/77867510


一、NSSavePanel

1、需要设置权限

路径:target --> capabilitys --> file access
设置 user selected file 为 read/write。
file access

如果不设置,会报错:
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不会显示;


二、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

猜你喜欢

转载自blog.csdn.net/lovechris00/article/details/77867510
今日推荐