早在C / C ++的那一天,真正让我兴奋的语言部分就是指针。我当然理解他们。
现在,Interface Builder代理对象或者更重要的是,如何使用Interface Builder以及在给定XIB的.XIB窗口(包含文件所有者,第一响应者等的窗口等)中放置什么。
我已经通过Xcodes示例和网络上发现的书籍和样本中的大量示例进行了介绍。他们一直很有帮助,但我仍然感到有点失落。
我觉得理解IB对于理解如何编写Mac / iPhone / iPod touch应用非常重要。
到目前为止,我已经浏览了以下资源: Aaron Hillegass'适用于Mac OS X的可可编程 务实的程序员资源: 在Xcode中变得富有成效(截屏视频) 可可程序设计 Objective-C 2.0编码(screncast) 编写您的第一个iPhone应用程序(截屏视频) iPhone SDK开发
我还浏览了Apple的Interface Builder用户指南PDF。
任何建议的提示/资源将不胜感激!
答案 0 :(得分:44)
首先,占位符在这里比代理更好。
通常,当您在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
子类开始,但是你必须知道所有的情况“大胆”应用,以及如何处理它们。文本视图和可编辑的Web视图可能需要不同的代码来处理“make bold”并在一个对象中装箱这将变得非常复杂并且不会非常可扩展。相反,您可以将“Make Bold”菜单项的操作连接到First Responder上的makeBold:
操作。这意味着当选择菜单项时,焦点对象或响应makeBold:
的父对象之一将获得makeBold:
消息。现在,许多类可以实现makeBold:
方法,并在它们处于焦点时响应此菜单项。
答案 1 :(得分:1)
除了“文件所有者”(在加载nib / xib时它被连接),你在IB中创建的对象是真实对象,而不是代理对象。
您可能希望查看一些现有的示例代码,以了解IB如何解决问题。你读过的文档/教程中有什么东西会让你感到困惑吗? “失去一点点”很难做到。
答案 2 :(得分:1)
Apple提供了以下文档,其中解释了Interface Builder NIB / XIB文件中的文件所有者,第一响应者和应用占位符对象:
Interface Builder User Guide: Placeholder Objects
我在你的问题中意识到你曾提到阅读Apple的Interface Builder文档,但我认为在此发布这个文章以供将来参考是合适的。此外,自首次提出问题以来,文档已经更新,因此从那时起他们就可以更清楚地了解文档。
答案 3 :(得分:0)