1

我目前正在学习 Cocoa,并遵循“通用”教程来获取带有按钮和标签的基本表单。

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

我的问题是:在 C++ 术语(我更熟悉的一种语言)中,我实际上对这个过程做了什么?据我了解,我的“对象”(设置为 ViewController 类)代表 .xib 文件的一个实例(此处可能有误),并且将此设置为 ViewController 类,我可以在 ViewController 中创建出口和操作.h/.m,但我仍然不确定幕后到底发生了什么。

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

4

1 回答 1

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 so 的适当位置。

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

于 2012-11-19T09:29:33.690 回答