显示NSOpenPanel时setAllowedFileTypes

时间:2013-10-15 04:27:15

标签: cocoa nsopenpanel

我有NSOpenPanel附件视图。附件视图很简单 - 它是一个复选框,选中后,允许用户选择任何文件;取消选中时,要求文件在支持的扩展名列表中为一个。

NSOpenPanel初始化和显示:

NSOpenPanel* dialog = [NSOpenPanel openPanel];

[dialog setAllowedFileTypes:allowedFileTypes];
[dialog setAccessoryView:openPanelAccessoryView];

openPanel = dialog;

[dialog beginSheetModalForWindow:[self activeWindow]
               completionHandler:^(NSInteger result)
 {
     ...
 }];

IBAction选中复选框:

- (void)openUnrecognizedFiles:(id)sender
{
    if ([sender state])
        [openPanel setAllowedFileTypes:nil];
    else
        [openPanel setAllowedFileTypes:@[@"dsk"]];
}

根据documentation,可以在显示面板时使用setAllowedFileTypes

  

面板运行时可以更改允许的文件类型(for   例如,从配件视图)。

但是,这似乎没有按预期工作:当前视图无法重新加载 - 当您滚动时,文件进一步向下执行根据新设置启用/禁用;但是,最初可见的文件不受影响。

当用户切换附件视图复选框时,我需要一些方法来刷新当前目录的内容 - 但是,我似乎无法找到任何方法来执行此操作。有什么建议吗?

编辑,2013年10月15日:这似乎是由小牛队中的一个错误引起的。在Mountain Lion上运行的相同代码没有任何问题,就像这里指出的两位评论者一样。

2 个答案:

答案 0 :(得分:3)

我尝试过这样的做法并且有效:

NSOpenPanel* dialog = [NSOpenPanel openPanel];

    [dialog setAllowedFileTypes:[NSArray arrayWithObject:@"png"]];

    NSButton *openPanelAccessoryView = [[[NSButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 324.0, 22.0)] autorelease];

    [openPanelAccessoryView setButtonType:NSSwitchButton];

    [openPanelAccessoryView setBezelStyle:0];

    [openPanelAccessoryView setAction:@selector(openUnrecognizedFiles:)];

    [openPanelAccessoryView setTarget:self];

    [dialog setAccessoryView:openPanelAccessoryView];

     openPanel = dialog;

    [dialog beginSheetModalForWindow:[[self view] window] completionHandler:^(NSInteger result){
        if(result == NSFileHandlingPanelOKButton)
        {

        }
    } ];

这与你的行动相同:

- (void)openUnrecognizedFiles:(id)sender

{
     if ([sender state])
      [openPanel setAllowedFileTypes:nil];
     else
      [openPanel setAllowedFileTypes:[NSArray arrayWithObject:@"jpeg"]];
}

现在文件类型正在按照&上的复选框进行更改关闭。

答案 1 :(得分:0)

您无法使用setAllowedFileTypes:方法隐藏文件。此方法仅在打开的面板中启用/禁用文件。

来自NSSavePanel.h

  

此属性将确定应在打开时启用哪些文件   面板