可可 - 视图处理的解释

时间:2012-11-19 08:54:26

标签: objective-c cocoa model-view-controller

我现在正在学习Cocoa,并且已经使用“通用”教程来获取带有按钮和标签的基本表单。

使用.xib,我添加了一个'Object'(NSObject子类的实例),并且还创建了一个ViewController类,我通过设置连接到我的视图Custom Class到ViewController。然后,我编写了ViewController.h.m个文件,添加了pressedButton方法和标签(myLabel)。这一切都正常(即按下按钮时标签会更新)。

我的问题是:我用C ++术语(我更熟悉的一种语言)实际上用这个过程做了什么?据我所知,我的'Object'(设置为ViewController类)表示.xib文件的一个实例(这里可能有问题),并且将此设置为ViewController类,我可以在ViewController中创建出口和动作.h / .m,但我仍然不确定幕后会发生什么。

最后,XCode模板提供AppDelegate类'免费'。鉴于我通过我的ViewController类管理我的控件,这个文件/对象将用于什么 - 是针对与视图本身无关的应用程序特定事物,还是用于管理控件在表格上也是如此(就像你在一些教程中看到的那样)?

1 个答案:

答案 0 :(得分:1)

我希望,我理解你问题的第一部分。 .xib(nib文件的xml版本)不代表类或对象。它用于创建一个视图对象及其所有子视图(每个都是一个对象),并将其正确链接到视图控制器。

最常见且自动生成的方式是,nib文件核心中的基础视图会转到self.view(从视图控制器的角度来看)。 您可以通过浏览self.view的子视图层次结构来访问nib文件创建的每个视图。或者,您可以在nib / IB(接口构建器)中定义标记,以便更轻松地访问各个视图对象。

“为了您的方便”,介绍了IBOutlets。您可以在视图控制器的界面中定义IBOutlet,并使用IB将其链接到使用xib文件创建的专用对象。 我说“只是为了你的方便”,因为它不是真正必要的,考虑其他方式来解决你的观察对象。但它非常方便,而且强烈推荐并且是标准的做法。

您甚至可以以编程方式将更多视图添加到使用IB创建的表单/视图中。您可以通过编程方式更改这些视图的属性。

使用initWithNibName:bundle:方法使用nib文件初始化视图控制器时,将创建视图和子视图。然后打开nib文件(xib这几天),解析和解释其内容,并分别创建所有视图并将其添加到其超级视图中,并相应地设置它们的属性和操作:选择器等。同样,整个过程都是为了您的方便而设计的。您甚至可以以编程方式创建所有视图等 - 根本没有任何nib文件。自定义视图控制器的loadView方法将是dong的适当位置。

第二个问题: AppDelegate专为应用程序范围的操作等而设计。如果您可以在视图控制器中管理所有内容,那么您无需在AppDelegate上更改任何内容。 它通常用作全局字符的变量或函数的容器(然后是属性和app委托对象的成员)。有时您可能会发现有必要覆盖一些AppDelegates方法,例如application:didFinishLanuncing或applicationDidBecomeActive。 严格来说,UIApplicationDelegate不是你子类的类。它是您实施的协议。 (非常类似于Java中的接口 - 有点克服了您从C ++熟悉的多重继承的缺失)。