我有一个带有附件视图的NSSavePanel设置,其中包含一个格式弹出菜单和一个带有各种选项的表格选项卡视图。它正确地显示在面板上,但我似乎无法调整它的大小。
在accessoryView上调用-setFrameSize会导致一次奇怪和不正确的大小调整,然后对任何后续调用都没有响应。视图中的其他控件完全拒绝响应任何呼叫。
NSSavePanel是否像NSSearchField一样,只使用分配给它的菜单作为模板?如果是这样,我如何在当前激活的保存面板中操作附件视图的特定实例?
发布于 2012-03-04 05:26:32
我的经验是(特别是对于必须在10.5上运行的代码),为了处理NSSavePanel的accessoryView中的置换大小,我们必须删除它(将其设置为零)并重新添加它。在10.7 (我相信是10.6)中,在更改frameSize之后调用[savePanel layoutIfNecessary]似乎就足够了。
在本例中,由于您提到您正在使用不可见的选项卡视图。通常,选项卡视图具有一致的大小。如果您希望根据不同子视图的内容调整NSSavePanel的大小,您可能希望将它们作为单独的视图(在相同或其他NIB文件中),并将它们作为子视图加载到NSSavePanel中。
在NIB是从磁盘上的插件模块列表动态加载的情况下,我成功地做到了这一点,在这种情况下,我使用了一个包含弹出菜单的整体视图,然后使用-setFrameSize:调整了该视图的大小,以便在向其添加子视图之前对其进行更改。然后,我使用addSubview:将子视图添加到现有视图中,并在更改大小并添加子视图后调用[savePanel layoutIfNecessary]。
下面是向现有exportFormatOptionsView视图(包含弹出菜单)添加exportAccessoryViewController (对于我们来说,这是根据对弹出菜单的选择而更改的内容)的四个代码片段:
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];当然,当您动态地切换这些视图时,您需要确保将中间视图的视图大小更改回原始大小,以便稍后可以添加补充视图,我就是这样做的:
NSSize currentSize = [exportFormatOptionsView bounds].size;
NSView *oldView = [exportAccessoryViewController view];
// pull it out
[oldView removeFromSuperview];
NSSize newSize = NSMakeSize( currentSize.width, currentSize.height-[oldView bounds].size.height);
[exportFormatOptionsView setFrameSize: newSize];
exportAccessoryViewController = nil;希望这能有所帮助。
https://stackoverflow.com/questions/9543604
复制相似问题