将“NSView”绘制到自定义视图 - 如何?我采取了正确的方法吗?

Posted

技术标签:

【中文标题】将“NSView”绘制到自定义视图 - 如何?我采取了正确的方法吗?【英文标题】:Drawing an "NSView" to a Custom-View - How? Am I taking the right approach? 【发布时间】:2011-03-05 22:13:17 【问题描述】:

我正在使用 Objective-C 和 Cocoa,同时为 Mac OS X 开发 - 所以不是 iPhone/Cocoa Touch。 (也就是说,如果它与 iPhone 的程序相同,我会很感兴趣)

我正在开发一个简单应用的首选项窗口。我有一个带有工具栏的 NSWindow - 工具栏上有 5 个不同的项目,所有这些项目都需要调出一组不同的选项。

所以我在 Interface Builder 中设置了 NSToolbar 及其项目,然后在菜单下方放置了一个自定义视图 - 占据了窗口的其余部分。我的计划是把每个 NSToolbarItems 选项的界面也设计出来,然后在点击指定的 NSToolbarItem 时将相应的视图绘制到自定义视图上。

我猜我只是为每个视图创建一个 NSView 子类,在 Interface Builder 中创建一个空的 xib - 将 xib 设置为我的自定义 NSView,像往常一样对其进行编码......但这里有一些问题;

1 - 我怎样才能让 xib 文件出现在自定义视图上呢?我环顾四周,大多数文章似乎都没有这种情况,或者我也可以联系到这种情况。

2 - 当窗口出现时,我希望默认视图出现在自定义视图上。再一次,我猜我只是在 NSWindow 的初始化代码中写了它——没什么大不了的。它只是回到问题 1——如何将我的 NSView 绘制到 Interface Builder 中指定的自定义视图?

如果有任何帮助,我将不胜感激! 提前干杯。

【问题讨论】:

【参考方案1】:

所以我在 Interface Builder 中设置了 NSToolbar 及其项目,然后在菜单下方放置了一个自定义视图 - 占据了窗口的其余部分。

窗口内不能有菜单。你可以有一个弹出按钮,它有一个菜单,但不是直接的菜单。您指的是“工具栏”吗?

您无需为此创建自定义视图。制作一个标签视图并将其设置为表格。给它与工具栏项一样多的选项卡视图项。在您的控制器中,为每个工具栏项编写一个操作方法,并在每个操作方法中,切换选项卡视图的活动选项卡。

您可以激活 IB 中的不同选项卡以使用 IB 中的视图填充它们。活动选项卡保存在笔尖中,因此请确保在保存之前将其设置回第一个选项卡,以便第一个选项卡是您的应用运行时最初处于活动状态的选项卡。

那么我怎样才能让 xib 文件出现在自定义视图上呢?

这个问题没有意义。

再一次,我猜我只是在 NSWindow 的初始化代码中写了它——没什么大不了的。

只有拥有自己的窗口初始化代码才能做到这一点,只有在子类化 NSWindow 时才能拥有。这样做的理由很少;除非您让窗口本身看起来不同(不是制作 Aqua 或 HUD 窗口),否则您应该将该初始化代码移到其他地方,可能是上述控制器(应该是 nib 的文件所有者)。

它只是回到问题 1 - 我如何将我的 NSView 绘制到 Interface Builder 中指定的自定义视图?

Interface Builder 中的自定义视图一个普通的 NSView(除非您明确地将其更改为您创建的 NSView 的子类)。但是,对于您在问题中描述的任何内容,您都不需要一个。

【讨论】:

以上是关于将“NSView”绘制到自定义视图 - 如何?我采取了正确的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 nib 自定义视图绑定到 NSVIew 子类

macOS 开发-NSView

如何将子视图添加到自定义 UICollectionViewCell

Cocoa:如何让表格视图在每个单元格中绘制自定义视图

如何将参数从视图传递到自定义控制器

如何在不重绘整个视图的情况下更新 NSView 的一部分