赞
踩
https://github.com/JHiroGuo/JHPanel
NSPanel
包含NSOpenPanel
文件打开面板和NSSavePanel
文件保存面板。是用来提供文件打开路径选择 和文件保存路径选择的两种系统样式。
用于文件打开路径或者文件保存
路径的选择
+(NSOpenPanel *)openPanelWithTitleMessage:(NSString *)ttMessage setPrompt:(NSString *)prompt chooseFiles:(BOOL)bChooseFiles multipleSelection:(BOOL)bSelection chooseDirectories:(BOOL)bChooseDirc createDirectories:(BOOL)bCreateDirc andDirectoryURL:(NSURL *)dirURL AllowedFileTypes:(NSArray *)fileTypes { NSOpenPanel *panel = [NSOpenPanel openPanel]; [panel setPrompt:prompt]; // 设置默认选中按钮的显示(OK 、打开,Open ...) [panel setMessage: ttMessage]; // 设置面板上的提示信息 [panel setCanChooseDirectories : bChooseDirc]; // 是否可以选择文件夹 [panel setCanCreateDirectories : bCreateDirc]; // 是否可以创建文件夹 [panel setCanChooseFiles : bChooseFiles]; // 是否可以选择文件 [panel setAllowsMultipleSelection : bSelection]; // 是否可以多选 [panel setAllowedFileTypes : fileTypes]; // 所能打开文件的后缀 [panel setDirectoryURL:dirURL]; // 打开的文件路径 return panel; }
NSOpenPanel *panel = [CustomePanel openPanelWithTitleMessage:@"Choose File" // folder 顶部提示 setPrompt:@"OK" // 文件选择确认键 显示内容(一般NULL随系统) chooseFiles:YES // 是否可以选择文件(如果为NO 则只可以选择文件夹) multipleSelection:YES // 是否可以多选 chooseDirectories:YES // 是否可以选择文件夹 createDirectories:YES // 是否可以创建文件夹 andDirectoryURL:NULL // 默认打开路径(桌面、 下载、...) AllowedFileTypes:[NSArray arrayWithObjects:@"png",@"jpg",@"bmp", nil] // 所能选择的文件类型 ]; __block NSArray *chooseFiles; [panel beginSheetModalForWindow:[NSApp mainWindow] completionHandler:^(NSModalResponse result) { if (result == NSModalResponseOK) { chooseFiles = [panel URLs]; NSLog(@"Click OK Choose files : %@",chooseFiles); }else if(result == NSModalResponseCancel) NSLog(@"Click cancle"); }]; NSLog(@"Choose files : %@",chooseFiles); -------------------------------------------------------- 2019-02-28 15:54:24.466364+0800 JHPanel[1557:21952] Choose files : (null) 2019-02-28 15:54:29.089672+0800 JHPanel[1557:21952] Click OK Choose files : ( "file:///Users/gjh/Desktop/31111142m4ap.jpg" ) --------------------------------------------------------
注意:在非模态打开情况下,当调用 beginSheetModalForWindow
后 会打开面板----->执行 beginSheetModalForWindow
下面的代码,然后当用户有选择OK/Cancle
的时候 才会执行completionHandler
的Block
方法。
NSOpenPanel *panel = [CustomePanel openPanelWithTitleMessage:@"Choose File" // folder 顶部提示 setPrompt:@"OK" // 文件选择确认键 显示内容(一般NULL随系统) chooseFiles:YES // 是否可以选择文件(如果为NO 则只可以选择文件夹) multipleSelection:YES // 是否可以多选 chooseDirectories:YES // 是否可以选择文件夹 createDirectories:YES // 是否可以创建文件夹 andDirectoryURL:NULL // 默认打开路径(桌面、 下载、...) AllowedFileTypes:[NSArray arrayWithObjects:@"png",@"jpg",@"bmp", nil] // 所能选择的文件类型 ]; NSLog(@"choose files : %@",[CustomePanel getOpenPanelChooseFiles:panel]); +(NSArray *)getOpenPanelChooseFiles:(NSOpenPanel *)panel; { NSArray *select_files; NSInteger result = [panel runModal]; if (result == NSModalResponseOK) { select_files = [panel filenames]; // 注意[panel Urls]的路径是 file:///User/GJH/.... if ([select_files count] == 1) { NSString * oneFile = [select_files objectAtIndex : 0]; NSLog(@"SELECT A FILE :%@",oneFile); }else{ NSLog(@"SELECT FILES"); } } return select_files; } -------------------------------------------------------- 2019-02-28 16:01:48.706727+0800 JHPanel[1584:24337] SELECT A FILE :/Users/gjh/Desktop/Image/psb.jpg 2019-02-28 16:01:48.706808+0800 JHPanel[1584:24337] choose files : ( "/Users/gjh/Desktop/Image/psb.jpg" ) --------------------------------------------------------
在模态模式下,当运行 [panel runModal]
代码执行会等待停留在文件选择Window
上等待用户选择后才会执行下面的代码,如果做Window
与Mac
协同开发,建议使用模态模式打开。
用于文件文件保存
路径的选择,注意必须设置User Selected File
权限。设置方法
路径:target –> capabilitys –> file access
设置 user selected file 为 read/write
否则会报错 *** Assertion failure in …
+(NSSavePanel *)savePanelWithTitleMessage:(NSString *)ttMessage setPrompt:(NSString *)prompt setTitle:(NSString *)title nameFiledValue:(NSString *)fileName createDirectories:(BOOL)bCreateDirc bSelectHiddenExtension:(BOOL)bSelectHiddenExtension andDirectoryURL:(NSURL *)dirURL AllowedFileTypes:(NSArray *)fileTypes { NSSavePanel *panel = [NSSavePanel savePanel]; [panel setMessage:ttMessage]; [panel setPrompt:prompt]; [panel setAllowedFileTypes:fileTypes]; [panel setCanCreateDirectories : bCreateDirc]; [panel setCanSelectHiddenExtension : bSelectHiddenExtension]; [panel setTitle:title]; [panel setNameFieldStringValue:fileName]; [panel setDirectoryURL:dirURL]; return panel; }
NSSavePanel *panel = [CustomePanel savePanelWithTitleMessage:@"Save File" setPrompt:NULL setTitle:@"Save File Panel" nameFiledValue:@"Image" createDirectories:YES bSelectHiddenExtension:YES andDirectoryURL:NULL AllowedFileTypes:[NSArray arrayWithObjects:@"png",@"jpg",@"bmp", nil]]; NSString *savePath = [CustomePanel getSavePanelChooseFiles:panel]; NSLog(@"Save Path : %@",savePath); +(NSString *)getSavePanelChooseFiles:(NSSavePanel *)panel { NSString *filePath = @""; NSInteger result = [panel runModal]; if (result == NSModalResponseOK) { filePath = [[panel URL] absoluteString]; //[panel filename] 注意两个路径的格式 NSLog(@"filePath : %@",filePath); }else { NSLog(@"Choose Cancle! "); } return filePath; } -------------------------------------------------------- 2019-02-28 16:15:00.677722+0800 JHPanel[1649:28355] filePath : /Users/gjh/Desktop/Image.png 2019-02-28 16:15:00.677770+0800 JHPanel[1649:28355] Save Path : /Users/gjh/Desktop/Image.png --------------------------------------------------------
NSSavePanel *panel = [CustomePanel savePanelWithTitleMessage:@"Save File" setPrompt:NULL setTitle:@"Save File Panel" nameFiledValue:@"Image" createDirectories:YES bSelectHiddenExtension:YES andDirectoryURL:NULL AllowedFileTypes:[NSArray arrayWithObjects:@"png",@"jpg",@"bmp", nil]]; __block NSString *chooseFile; [panel beginSheetModalForWindow:[NSApp mainWindow] completionHandler:^(NSModalResponse result) { if (result == NSModalResponseOK) { chooseFile = [[panel URL] absoluteString]; NSLog(@"Click OK Choose files : %@",chooseFile); }else if(result == NSModalResponseCancel) NSLog(@"Click cancle"); }]; NSLog(@"Choose files : %@",chooseFile); -------------------------------------------------------- 2019-02-28 16:16:25.377756+0800 JHPanel[1649:28355] Choose files : (null) 2019-02-28 16:16:26.322764+0800 JHPanel[1649:28355] Click OK Choose files : file:///Users/gjh/Desktop/Image.png --------------------------------------------------------
+(NSSavePanel *)savePanelWithAllowedFileTypes:(NSArray *)fileTypes titleMessage:(NSString *)ttMessage setPrompt:(NSString *)prompt andAccessoryImage:(NSImage *)accessoryImage { NSSavePanel *panel = [NSSavePanel savePanel]; NSView *accessoryView = [[NSView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)]; NSImageView *accessoryImageView = [[NSImageView alloc]initWithFrame:accessoryView.frame]; accessoryImageView.image = accessoryImage; accessoryImageView.wantsLayer = YES; accessoryImageView.layer.backgroundColor = [NSColor whiteColor].CGColor; [accessoryView addSubview:accessoryImageView]; [panel setAccessoryView:accessoryView]; [panel setAllowedFileTypes:fileTypes]; [panel setCanCreateDirectories : YES]; return panel; } NSSavePanel *panel = [CustomePanel savePanelWithAllowedFileTypes:[NSArray arrayWithObjects:@"png",@"jpg",@"bmp", nil] titleMessage:@"Save File" setPrompt:NULL andAccessoryImage:[NSImage imageNamed:@"QRCode"]]; [panel runModal];
PS : 模态状态下都是以弹窗的形式弹出,但是如果有多个扩展屏幕。需要注意弹出的窗体可能和应用程序不在一个窗口上。非模态下弹出窗体都是在应用上以刘海的形式弹出,大需要注意的是,有关Code
执行循序的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。