我有NSOpenPanel
一个accessoryView
; 在此视图中,用户选择几个单选按钮来更改允许的类型。当面板打开时,正确的文件被启用,另一个被禁用。好的,很好。
现在用户更改单选按钮,viewController
accessoryView 观察单选按钮矩阵的变化并随之改变allowedTypes
NSOpenPanel。
之后,根据 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
,但这是在用户单击“打开”后调用的,这非常糟糕。