Mac OS 中NSSavePanel以及NSOpenPanel的使用

SSavePanel

最近需要保存文档到本地,因为不是Pictures、Music或者Movies,不能使用这几个权限,因此使用NSSavePanel让用户自定义保存路径。以下是代码

技术分享
 1     NSSavePanel*    panel = [NSSavePanel savePanel];
 2     [panel setNameFieldStringValue:@"Untitle.onecodego"];
 3     [panel setMessage:@"Choose the path to save the document"];
 4     [panel setAllowsOtherFileTypes:YES];
 5     [panel setAllowedFileTypes:@[@"onecodego"]];
 6     [panel setExtensionHidden:YES];
 7     [panel setCanCreateDirectories:YES];
 8     [panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
 9         if (result == NSFileHandlingPanelOKButton)
10         {
11             NSString *path = [[panel URL] path];
12             [@"onecodego" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
13         }
14     }];
技术分享

-1 第2行代码是设置默认的文件名

-2 第3行代码是设置提示信息

-3 第5行代码是设置允许的文件类型

-4 第6行代码是隐藏扩展名

-5 第7行代码是设置可以创建文件

-6 第8 - 14行代码是运行窗口

-7 第9行代码是判断用户点击的是不是OK按钮(默认title好像是Save)

-8 第11行代码是取出用户选择保存的路径

需要注意的是设置文件名的时候需要带上扩展名(如示例中第2行),需要设置允许的文件类型(如示例中第5行),并设置隐藏扩展名(如示例中第6行)以及可创建文件(如示例中第7行)。设置这几个属性之后,运行示例代码:

技术分享

此时修改文档名字(如修改为onecodego),选择保存路径为Documents,点击save。

打开Finder,在Documents中就可以找到onecodego.onecodego。

需要注意的是这样保存的文档只能在当此打开的时候读写,也就是说当退出软件或者重启电脑对该路径文件的读写权限就没有了。

 

NSSavePanel*    panel = [NSSavePanel savePanel];
    NSView *viewExt = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 180, 40)];
    
    NSTextField *labExt = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 10, 80, 20)];
    
    
    
    [labExt setBordered:NO];
    
    [labExt setDrawsBackground:NO];
    
    labExt.stringValue = @"Image type: ";
    
    
    
    NSComboBox *cbExt = [[NSComboBox alloc] initWithFrame:NSMakeRect(80, 8, 100, 25)];
    
    [cbExt addItemsWithObjectValues:@[@".bmp", @".jpg", @".png", @".tif"]];
    
    [viewExt addSubview:labExt];
    
    [viewExt addSubview:cbExt];
    
    [panel setAccessoryView:viewExt];
    
    [panel setNameFieldStringValue:@"Untitle.onecodego"];
    [panel setMessage:@"Choose the path to save the document"];
    [panel setAllowsOtherFileTypes:YES];
    [panel setAllowedFileTypes:@[@"onecodego"]];
    [panel setExtensionHidden:YES];
    [panel setCanCreateDirectories:YES];
    [panel beginSheetModalForWindow:_window completionHandler:^(NSInteger result){
        if (result == NSFileHandlingPanelOKButton)
        {
            NSString *path = [[panel URL] path];
            [@"onecodego" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
        }
    }];

 

NSOpenPanel

使用NSOpenPanel打开用户选择的文件

技术分享
 1     NSOpenPanel *panel = [NSOpenPanel openPanel];
 2     [panel setDirectory:NSHomeDirectory()]; 
 3     [panel setAllowsMultipleSelection:NO];
 4     [panel setCanChooseDirectories:YES]; 
 5     [panel setCanChooseFiles:YES];
 6     [panel setAllowedFileTypes:@[@"onecodego"]];
 7     [panel setAllowsOtherFileTypes:YES];
 8     if ([panel runModal] == NSOKButton) {
 9         NSString *path = [panel.URLs.firstObject path];
10         //code
11     }
技术分享

-1 第2行代码是设置默认的路径

-2 第3行代码是设置不允许多选

-3 第4行代码是设置可以打开文件夹

-4 第5行代码是设置可以选中文件

-5 第6行代码是设置可以打开的文件类型

-6 第8行代码是判断用户选中的是不是OK按钮

-7 第9行取出用户选中的路径

需要注意的是需要设置允许的文件类型,如示例允许的文件类型为onecodego,因此在NSOpenPanel中只能打开后缀为onecodego的文件,如下图:技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。