首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSavePanel用AccessoryView更改文件扩展名

NSSavePanel用AccessoryView更改文件扩展名
EN

Stack Overflow用户
提问于 2013-08-26 12:44:59
回答 2查看 3.9K关注 0票数 6

我有NSSavePanelaccessoryView,让用户选择图形格式,这样他们就可以将图像(NSImage)保存为文件。到目前为止,我有以下几点。(我跳过了几行以使它更短。)

代码语言:javascript
复制
- (void)exportFile {    
    NSString *filename;
    if (formatIndex1 == 0) { // Default selection by user in Preferences
        filename = @"Untitled.bmp";
    }
    else if (formatIndex1 == 1) {
        filename = @"Untitled.gif";
    }
    ...

    [panel setAllowedFileTypes:[[NSArray alloc] initWithObjects:@"bmp",@"gif",@"jpg",@"jp2",@"png",nil]];
    [panel setAllowsOtherFileTypes:NO];
    [panel setExtensionHidden:NO];
    [panel setCanCreateDirectories:YES];
    [panel setNameFieldStringValue:filename];
    [panel setAccessoryView:accessoryView1];
    [formatMenu1 setAction:@selector(dropMenuChange:)]; // formatMenu1 is NSPopUpButton
    [formatMenu1 setTarget:self];

    [panel beginSheetModalForWindow:window completionHandler:^(NSInteger result) {
        if (result == NSFileHandlingPanelOKButton) {
            // getting panel url
        }
    }];
}

-(void)dropMenuChange:(NSPopUpButton *)sender { 
    NSSavePanel *savePanel = (NSSavePanel *)[sender window];
    [savePanel setNameFieldStringValue:@"..."];
}

我不能百分之百肯定我做得对。我想要实现的是,每当用户在accessoryView的NSPopUpButton上选择文件格式时,我都希望将正确的扩展名附加到当前的文件名。有什么神奇的方法吗?还是我必须以编程的方式将扩展名设置为setNameFieldStringValue的当前文件名?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-26 14:27:27

必须使用setNameFieldStringValue设置具有正确扩展名的当前文件名。

代码语言:javascript
复制
-(void)dropMenuChange:(NSPopUpButton *)sender { 
    NSSavePanel *savePanel = (NSSavePanel *)[sender window];
    NSString *nameFieldString = [savePanel nameFieldStringValue];
    NSString *nameFieldStringWithExt = [NSString stringWithFormat:@"%@.%@",[savePanel nameFieldStringValue], popupvalue];
    [savePanel setNameFieldStringValue:nameFieldStringWithExt];
}
票数 0
EN

Stack Overflow用户

发布于 2013-08-30 08:40:00

我想要实现的是,每当用户在accessoryView的NSPopUpButton上选择文件格式时,我都希望将正确的扩展名附加到当前的文件名。有什么神奇的方法吗?

是的,有。不需要自己用setNameFieldStringValue:来做,让savePanel来做吧。让我们假设fileName是一个像/Users/hg/Pictures/2013/08/Airplanes/pic123.png一样的完整路径,并且它存在一个带有matrix of radio buttons的savePanel的accessoryView。每个按钮都有一个标题,如“jpg”或“png”或.矩阵的作用是-selectFileType:

代码语言:javascript
复制
- (IBAction) selectFileType:(id)sender
{
    [savePanel setAllowedFileTypes:@[ [[sender selectedCell] title] ] ];
    // this will set the right extension
}

对于使用savePanel,我尝试了以下代码:

代码语言:javascript
复制
- (void) saveImage:(NSImage *) theImg
{
  savePanel = [NSSavePanel savePanel];
  NSString *imageName = [fileName lastPathComponent];
  NSString *suffix = [imageName pathExtension];
  NSString *baseName = [imageName stringByDeletingPathExtension];

  // prepare the savePanel
  [savePanel setAccessoryView:accessoryView];
  [savePanel setAllowedFileTypes:@[ suffix ] ];
  [savePanel setDirectoryURL:[NSURL fileURLWithPath:fileName]];  // convert to URL
  [savePanel setNameFieldStringValue:baseName ];  // without extension !
  // savePanel does append the suffix

  // and now start the savePanel and choose the wanted fileType
  int rtn = [savePanel runModal];   // preferred method since 10.6
  if( rtn==NSFileHandlingPanelCancelButton) return;    // do nothing

  // finally create and save the file
  if( [[[savePanel allowedFileTypes] objectAtIndex:0] isEqualToString:@"jpg" ){
      // save as jpg-file
  }
  // check for other fileTypes
  . . . 
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18444448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档