【问题标题】:Cocoa - explanation of view handlingCocoa - 视图处理的解释
【发布时间】:2012-11-19 08:54:26
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案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++ 中缺乏多重继承的问题)。

    【讨论】:

    • 非常感谢 Hermmann...解释得很好。我知道我必须停止用 Objective-C 来思考 C++,但它确实有助于看到相似之处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多