我有一个NSSavePanel设置了一个附件视图,其中包含一个格式弹出菜单和一个tabless tabview,其中包含有关所选格式的各种选项。它正确显示在面板上,但我似乎无法调整其大小。
在accessoryView上调用-setFrameSize导致奇数和不正确的大小调整一次,然后对任何后续调用都没有响应。视图中的其他控件完全拒绝响应任何调用。
NSSavePanel是否像NSSearchField一样工作,它只使用其指定的菜单作为模板?如果是这样,我如何操作当前活动保存面板中附件视图的特定实例?
答案 0 :(得分:1)
我的经验(特别是对于必须在10.5上运行的代码),为了处理accessoryView for NSSavePanel中的置换大小,我们必须删除(将其设置为nil)并重新添加它。在10.7(并且,我相信,10.6)下,在更改frameSize之后调用[savePanel layoutIfNecessary]
似乎就足够了。
在这种情况下,由于您提到您使用的是隐形标签视图。通常,选项卡视图具有一致的大小。如果您希望根据各个子视图的内容调整NSSavePanel的大小,您可能希望将它们保存为单独的视图(在相同或其他NIB文件中),并将它们作为子视图加载到NSSavePanel中。
我已成功完成此操作,其中NIB是从插件模块的磁盘列表动态加载的,其中我使用了包含弹出菜单的单个整体视图,然后使用{调整了该视图的大小{1}}以便在向其添加子视图之前更改它。然后我使用-setFrameSize:
将子视图添加到现有视图中,并在更改大小并添加子视图后调用addSubview:
。
以下是我们现有的exportFormatOptionsView视图(包含弹出菜单)中添加了exportAccessoryViewController(这对我们来说是基于弹出菜单选择的更改)的四个片段:
[savePanel layoutIfNecessary]
当然,当您动态切换它们时,需要确保将中间视图的视图大小更改回原始大小,以便稍后添加补充视图,我这样做:< / p>
NSSize currentSize = [exportFormatOptionsView bounds].size;
NSView *newView = [exportAccessoryViewController view];
NSSize newSize = NSMakeSize( currentSize.width, currentSize.height+[newView bounds].size.height);
// resize the parent view
[exportFormatOptionsView setFrameSize: newSize];
// move the child view
[exportFormatOptionsView addSubview: newView];
希望这有帮助。