【发布时间】:2013-08-12 17:24:09
【问题描述】:
我有一个NSOpenPanel 和一个accessoryView;在此视图中,用户选择几个单选按钮来更改允许的类型。当面板打开时,正确的文件被启用,另一个被禁用。好的,很好。
现在用户改变了单选按钮,accessoryView 的viewController 观察单选按钮矩阵的变化,从而改变了 NSOpenPanel 的allowedTypes。
之后,根据 Apple 文档,它调用 -validateVisibleColumns,但面板中没有任何可见的变化。那就是:正确的文件似乎被禁用了:我可以选择它们,但它们是灰色的!
另一个错误的效果:我选择了一个文件(启用),更改文件类型,(现在错误的)文件保持选中状态,启用了 OK 按钮:但这是错误的文件类型!好像发生了变化但是界面不知道!
我的代码是(选中的是绑定到单选按钮的矩阵):
- (void)observeValueForKeyPath.....
{
NSString *extension = (self.selected==0) ? @"txt" : @"xml";
[thePanel setAllowedFileTypes:@[extension, [extension uppercaseString]]];
[thePanel validateVisibleColumns];
}
我第一次尝试插入通话
[thePanel displayIfNeeded]
然后我尝试了
[thePanel contentView] setNeedsDisplay]
没有结果。我还尝试实现面板委托方法panel:shouldEnableURL:,应该由validateVisibleColumns调用:我刚刚发现它只被调用了一次,在NSOpenPanel的开头。
有人知道为什么会这样吗?我用沙盒和非沙盒应用程序尝试了所有这些,没有区别。我正在使用 10.8 sdk 进行 ML 开发。
编辑
到目前为止,避免该问题的唯一方法是实现panel:validateURL:error,但这是在用户单击“打开”后调用的,非常糟糕。
【问题讨论】:
-
你想调用 validateVisibleColumns。我明白了。我没有得到什么。
-
@TBlue:因为当用户在附件视图中做出选择时,我想更改 NSOpenPanel 允许的文件类型。我希望面板禁用某些文件并启用其他一些文件。
标签: objective-c macos nsopenpanel