【问题标题】:setAllowedFileTypes while NSOpenPanel is displayed显示 NSOpenPanel 时的 setAllowedFileTypes
【发布时间】:2013-10-15 04:27:14
【问题描述】:

我有一个带有附件视图的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

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

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

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

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

【问题讨论】:

    标签: cocoa nsopenpanel


    【解决方案1】:

    我试过这样,效果很好:

    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"]];
    }
    

    现在文件类型正在根据复选框的开启和关闭进行更改。

    【讨论】:

    • 在我的情况下文件类型也发生了变化。当您选中/取消选中该框时,文件是否会启用/禁用?这就是问题所在 - 当我切换复选框时视图不会更新。
    • 再三考虑没关系 - 我所看到的可能是由于 Mavericks GM 中的错误(请参阅我的问题的编辑)。
    【解决方案2】:

    您不能使用setAllowedFileTypes: 方法隐藏文件。此方法只会启用/禁用打开面板中的文件。

    来自NSSavePanel.h

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

    【讨论】:

    • 我对隐藏文件不感兴趣;我有兴趣启用/禁用它们。
    • (s)他想在面板显示时启用/禁用文件。当面板出现时,设置 allowedFileTypes 没有直接的明显效果。 tableview 必须重新加载其数据。所以不,它不起作用。仅当您在显示面板之前设置 allowedFileTypes 时才有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多