MacOS 開發 - NSOpenPanel & NSSavePanel 保存文件、打開文件夾


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章