早在C/C++的那一天,真正让我兴奋的语言部分就是指针.当然,我现在明白了.
现在,Interface Builder代理对象或更重要的是,如何使用Interface Builder以及放置在给定XIB的.XIB窗口(包含文件所有者,第一响应者等的窗口等)中的内容.
我在Xcodes示例和网络上找到的书籍和样本中都有很多例子.他们一直很有帮助,但我仍然觉得有些失落.
我觉得理解IB对于理解如何编写Mac/iPhone/iPod touch应用程序非常重要.
到目前为止,我已经完成了以下资源:Aaron Hillegass'用于Mac OS X的Cocoa编程实用程序员资源:在Xcode中成为生产者(截屏视频)Objective-C 2.0中的可可编程编码(screncast)编写您的第一个iPhone应用程序(截屏视频)iPhone SDK开发
我还浏览了Apple的Interface Builder用户指南PDF.
任何建议的提示/资源将不胜感激!
首先,占位符在这里比代理更好.
通常,当您在NIB/XIB文件中有对象时,这意味着加载NIB文件将创建该实例.占位符对象是加载NIB文件时已存在的对象,它们出现在NIB内部,以便您可以通过加载NIB和已存在的对象来创建将要创建的对象之间的连接.
文件的所有者,第一响应者和应用程序都是占位符.
文件的所有者是将加载nib的对象的占位符.所有NIB加载方法都采用'owner'参数.当您与文件所有者建立连接时,当它在运行时建立时,它将连接到传递给nib加载方法的所有者对象.许多UIKit和AppKit类为您调用nib加载方法.NSApplication
,NSViewController
,NSWindowController
,UIApplication
,并UIViewController
代表所有负载NIB文件.当他们这样做时,他们将self作为所有者参数传递给nib加载方法.这就是为什么当您使用视图控制器或窗口控制器时,您将文件的所有者设置为子类,并在视图和文件所有者之间建立大部分连接.
该NSApplication
实例是一个简单的占位符[NSApplication sharedApplication]
.这是一个全局单例,Interface Builder中的图标代表全局单例.加载NIB文件不会创建第二个NSApplication
实例.相比之下,当NIB文件包含一个窗口时,如果你加载它十几次,你将有十几个窗口实例,但仍然只有一个NSApplication
实例.
第一响应者是独一无二的.将动作连接到第一响应者意味着当动作被触发时,它应该动态地发送到响应者链.响应者链通常以聚焦视图开始,并继续向上通过视图层次结构并包括一些控制器和委托.链中的每个对象都有一个处理动作的镜头.菜单项与响应链相结合.如果你有一个"Make Bold"的菜单项,它应该使当前选中的文本变为粗体,你可以先把它连接到一个NSApplication
子类,但是你必须知道"Make Bold"的所有情况.适用,以及如何处理它们.文本视图和可编辑的Web视图可能需要不同的代码来处理"make bold"并在一个对象中装箱这将变得非常复杂并且不会非常可扩展.相反,您可以将"Make Bold"菜单项的操作连接到makeBold:
First Responder上的操作.这意味着当选择菜单项时,焦点对象或其响应的父节点之一makeBold:
将获得该makeBold:
消息.现在,许多类可以实现一个makeBold:
方法,并在它们处于焦点时响应此菜单项.