gpt4 book ai didi

objective-c - 操作 NSSavePanel 的accessoryView?

转载 作者:行者123 更新时间:2023-12-03 16:43:33 25 4
gpt4 key购买 nike

我有一个 NSSavePanel 设置了一个附件 View ,其中包含一个格式弹出菜单和一个表格选项卡 View ,其中包含有关所选格式的各种选项。它正确显示在面板上,但我似乎无法调整其大小。

在accessoryView上调用-setFrameSize会导致一次奇怪且不正确的大小调整,然后对任何后续调用都没有响应。 View 中的其他控件完全拒绝响应任何调用。

NSSavePanel 是否像 NSSearchField 一样工作,仅使用其指定的菜单作为模板?如果是这样,我如何在当前事件的保存面板中操作附件 View 的特定实例?

最佳答案

我的经验是(尤其是必须在 10.5 上运行的代码),为了处理 NSSavePanel 的accessoryView 中的排列大小,我们必须删除(将其设置为 nil)并重新添加它。在 10.7 下(我相信是 10.6),更改frameSize 后调用 [savePanel layoutIfNecessary] 似乎就足够了。

在这种情况下,因为您提到您正在使用不可见的选项卡 View 。通常选项卡 View 具有一致的大小。如果您希望根据各个 subview 的内容调整 NSSavePanel 的大小,您可能希望将它们保留为单独的 View (在相同或其他 NIB 文件中),并将它们作为 subview 加载到 NSSavePanel 中。

在 NIB 是从插件模块的磁盘列表中动态加载的情况下,我成功地完成了此操作,其中我使用了包含弹出菜单的单个整体 View ,然后使用 -setFrameSize: 调整了该 View 的大小为了在添加 subview 之前更改它。然后我使用 addSubview: 将 subview 添加到现有 View 中,并在更改大小并添加 subview 后调用 [savePanel layoutIfNeeded]

以下是将exportAccessoryViewController 添加到我们现有的exportFormatOptionsView View (其中包含弹出菜单)的四个片段(这对我们来说是根据弹出菜单的选择而发生的变化):

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

当然,当你动态切换这些 View 时,你需要确保将中间 View 的 View 大小更改回原始大小,以便你可以稍后添加补充 View ,我是这样做的:

    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;

希望这有帮助。

关于objective-c - 操作 NSSavePanel 的accessoryView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543604/

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