gpt4 book ai didi

cocoa - 显示 NSOpenPanel 时设置AllowedFileTypes

转载 作者:行者123 更新时间:2023-12-03 16:32:04 24 4
gpt4 key购买 nike

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

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:

The allowed file types can be changed while the panel is running (for example, from an accessory view).

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

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

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

最佳答案

我已经尝试过这样的方法并且有效:

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

现在文件类型正在根据复选框的打开和关闭而变化。

关于cocoa - 显示 NSOpenPanel 时设置AllowedFileTypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19373298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com