gpt4 book ai didi

macos - 如何删除或替换Interface Builder中自动添加的NSView?

转载 作者:行者123 更新时间:2023-12-03 16:10:54 24 4
gpt4 key购买 nike

当我在 XCode 4.6 中创建一个新的 OSX 项目并选择 Cocoa Application 模板时,我随后在 Interface Builder 中看到的是一个 NSWindow、一个 NSMenu(预先填充了一些菜单项)和一个 NSView。 NS窗口。但是,当我尝试删除 NSView 并将其替换为 NSTableView 或将 NSView 嵌入 NSScrollView 中时,我无法这样做。

自动生成的 NSView 有什么特别之处吗? NSWindow 是否需要 NSView 位于其之上,并且不允许其他子类(如 NSTableView 或 NSCollectionView)成为层次结构中的 Root View ?我知道我可以更改身份检查器中的类,但这似乎没有任何作用。对这个新手有什么想法或提示吗?

最佳答案

这是窗口的内容 View 。所有窗口都必须有一个来包含其内容,因此窗口默认提供一个。虽然可以使用您想要的任何 View 作为内容 View (在代码中使用 setContentView: 方法),但 Interface Builder 目前不允许您替换它,可能是因为它可能会产生一些意外的结果.

除非您有充分的理由替换内容 View ,否则最好将您的 View 放在其中。您可以使 View 占据整个区域,并使用自动调整大小蒙版或自动布局约束来保持这种状态。这将使您的 View 看起来像是内容 View ,唯一的区别是 View 层次结构的额外级别。

如果您确实想要更改内容 View ,可以在 Interface Builder 中通过设置自定义类来完成。然而,正如您所看到的,这并不会使 View 表现得像您选择的那样。 Interface Builder 会忽略自定义类来显示 View 并选择其设置,并在运行时使用正确的类。这在大多数情况下都是不可取的,因为您无法指定任何设置。

更改内容 View 的更好方法是用代码进行。您可以在 Interface Builder 中创建不在任何窗口中的 View ,并在其中构建层次结构。然后,在 Nib 加载之后但在显示窗口之前,您的代码将用您自己的代码替换窗口的默认内容 View 。例如,如果一个对象具有名为 windownewContentView 的属性,它可以更改内容 View 并显示窗口,如下所示:

[self.window setContentView:self.newContentView];
[self.window makeKeyAndOrderFront:nil];

关于macos - 如何删除或替换Interface Builder中自动添加的NSView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18244575/

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