Mac开发笔记 - NSAlert、NSOpenPanel、NSSavePanel

1,697 阅读1分钟

Created by Linxi 2020/05/30

弹窗 NSAlert

简单示例

NSAlert *alert = [[NSAlert alloc] init];
alert.alertStyle = NSAlertStyleWarning;
alert.messageText = @"提示";
alert.informativeText = @"请先选择文件";
[alert addButtonWithTitle:@"确定"];
[alert runModal];
  1. alert.messageText

    NSAlertStyleWarning / NSAlertStyleInformational

    NSAlertStyleCritical

  2. alert.showHelp = YES; 这时候会多个帮助按钮,点击 帮助按钮 需要遵循协议NSAlertDelegate,实现- (BOOL)alertShowHelp:(NSAlert *)alert协议方法即可。

  3. 使用runModal 方法弹出弹窗

  4. 使用beginSheetModalForWindow:completionHandler:方式弹出弹窗,会贴在窗口那里,并且如果有多个按钮的话,可以在block回调里得知具体的点击项目。

  5. addButtonWithTitle: 如果你有很多按钮的话,可以用这个方法一直添加按钮。排列方式是从右到左

    [alert addButtonWithTitle:@"确定"];
    [alert addButtonWithTitle:@"确定2"];
    [alert addButtonWithTitle:@"确定3"];
    [alert addButtonWithTitle:@"确定4"];
    [alert addButtonWithTitle:@"确定5"];
    

  6. alert.accessoryView 在AlerView内添加自定义View,目前只测试了用文本可行。

    NSTextView *accessory = [[NSTextView alloc] initWithFrame:NSMakeRect(0,0,200,15)];
    NSFont *font = [NSFont systemFontOfSize:[NSFont systemFontSize]];
    NSDictionary *textAttributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
    NSAttributedString *attr = [[NSAttributedString alloc] initWithString:@"Text in accessory view." attributes:textAttributes];	[accessory insertText:attr replacementRange:NSMakeRange(0, attr.length)];
    [accessory setEditable:NO];
    [accessory setDrawsBackground:NO];
    
    alert.accessoryView = accessory;
    

打开文件 NSOpenPanel

NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setPrompt: @"打开"];
      
// 限制文件类型
openPanel.allowedFileTypes = [NSArray arrayWithObjects: @"db", nil];
// 指定初始路径,空的话标识使用上次的打开记录所在的文件夹。
openPanel.directoryURL = nil;
// 是否允许多选
openPanel.allowsMultipleSelection = YES;
// 是否允许选择文件
openPanel.canChooseDirectories = YES;
// 显示隐藏文件
openPanel.showsHiddenFiles = YES;

[openPanel beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse returnCode) {
    if (returnCode == 1) {
        NSLog(@"%@",openPanel.URLs.lastObject.path);
    }
}];

保存文件到路径下 NSSavePanel

NSSavePanel *savePanel = [NSSavePanel savePanel];
savePanel.title = @"保存文件";
savePanel.message = @"保存加密后的文件路径";
// 默认保存的文件名
savePanel.nameFieldStringValue = @"ExportOptions.db"];
// 是否允许创建文件夹
savePanel.canCreateDirectories = YES;
// 文件类型
savePanel.allowedFileTypes = @[@"db"];
// 是否隐藏后缀名
savePanel.extensionHidden = NO;
[savePanel beginWithCompletionHandler:^(NSModalResponse result) {
    if (result == NSModalResponseOK) {
        NSString *path = [[savePanel URL] path];
        NSLog(@"%@",path);
    }
}];