NSView高级概述?

时间:2010-10-16 05:00:15

标签: cocoa nsview xib nsviewcontroller

我正在尝试创建自定义视图并将其加载到窗口中。

最后,我知道将会有几个步骤,反映出我所缺少的关键关系。我希望有人可以通过一系列步骤解释如何创建视图对象,查看控制器,关联的.xib,然后将其加载到窗口中(清除当前视图后)。

我的意思是在哪里声明和初始化,需要导入什么,一切都是真正的细节。因为我正在浏览我所拥有的每本书,而且我的小脑也不清楚。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

如何创建视图对象,视图控制器,关联的.xib,然后将其加载到窗口中......

这些是几件事,其中一些是冲突的。

如果在代码中创建视图,则不需要(也不应该)在笔尖中创建视图,反之亦然。

如果你创建一个视图控制器来加载nib,你将在一个nib中创建视图,所以你绝对不应该在代码中创建相同的视图。

您无需为大多数视图创建视图控制器。让每个控制器拥有一个窗口的整体更为常见。您需要视图控制器的唯一时间是在单个窗口中管理复杂的视图层次结构(很可能是您将应用程序设置为单窗口)。

  

...(清除当前视图后)。

Cocoa中没有“当前观点”。您可以拥有多个窗口,每个窗口都有一个深层视图层次结构,通常在运行时不会编辑。在某种标签式UI之外交换另一个视图非常不寻常。

在代码中创建视图对象

向所需的视图类发送alloc消息,并在返回的视图中发送initWithFrame:消息(除非该类文档另有规定)。当然,您需要释放或自动发布此视图。

在笔尖中创建视图对象

给它自己的笔尖(特别是对于视图控制器)

使用IB(新建)或Xcode(添加文件)中的view-nib模板。如果您在Xcode中创建它,请不要忘记获取信息并使其可本地化。如果您在IB中创建它,则应将其保存到一个.lproj文件夹中;那么它已经可以本地化了。

从这些模板创建的nib将包含一个空的NSView。您可以更改其类和/或添加子视图,如下所述。

在现有的笔尖中进行

将“自定义视图”从“库”选项板拖到nib窗口中,然后在⌘6检查器上设置视图的类。

您只能在笔尖的顶级视图中执行此操作。有关其子视图,请参阅下文。

将视图放入窗口的视图层次结构

如果视图应该是窗口视图层次结构的根(窗口的内容视图)

设置窗口的内容视图。

在IB中,您无法更改窗口的内容视图。相反,你改变它的东西 - 它的类,子视图等。没有理由尝试用IB中的另一个视图替换窗口的内容视图。

如果视图应该是现有视图的子视图

在代码中执行此操作的方法是向superview发送addSubview:消息。

如果两个视图都在同一个笔尖中,请创建子视图并将其添加到同一个动作中的超级视图中。将“自定义视图”从库中拖动到超级视图,而不是nib窗口,然后在⌘6检查器上设置子视图的类。

(如果您要自定义其中一个标准Apple视图,而不是制作完全原创的自定义视图,请从库中拖动您基于的标准Apple视图,然后将其类更改为您自定义的子类。)