视图控制器是否必须在iPhone应用程序中拥有委托?

时间:2010-05-24 08:09:33

标签: iphone objective-c cocoa

我正在学习如何开发自己的iPhone应用程序,但我很难理解某些概念。

首先,我说对于每个视图,都必须有一个视图控制器吗?对于每个视图控制器,都必须有代表吗?

另外,mainWindow.nib的作用是什么?我读过的大多数教程似乎都没有触及那个笔尖。总是发生的事情是将NavigationController设置为根控制器,它将另一个ViewController推送到堆栈上,这个ViewController将有另一个与之关联的nib。

那么我可以假设我可以安全地忽略主窗口笔尖吗?

1 个答案:

答案 0 :(得分:2)

所有关于MVC (Model View Controller),是什么?

模型,这取决于您 - 您的应用是做什么的?将其视为后端,即应用程序的引擎,不受字体大小决定和触摸事件的影响。

视图,Apple几乎为你写了这个。您使用他们的文本字段和表格和imageViews。您可以使用Interface Builder将它们组合到GUI中(打包为.nib)。你很少,如果需要继承标准视图元素(在游戏中你想要一个自定义视图绘制,因为你的所有绘图可能都是自定义的)。您可以将GUI的不同部分分解为不同的.nib文件(如果这有助于您管理它们)。这完全取决于你。

控制器,因此您可能需要一些工作来启用GUI来表示您的模型。你需要一些控制器。多少?然而,许多是可以管理的。如果你有一个包含2个子视图的视图,他们每个人都需要一个视图控制器吗?不,可能不是。将视图连接到模型的代码有多复杂?

一些GUI模式非常普遍,Apple甚至为您编写了Controller代码。 EG是UINavigationBar的控制器, UINavigationController 。因此,如果您的应用程序具有需要浏览的分层视图,并且您需要显示导航栏,则可以使用UINavigationController的实例而不是编写自己的类。耶!

当然,UINavigationController代码(或任何其他viewController)无法神奇地知道如何与我们的模型集成,我们的观点可以吗?不,它不能。一般来说,在Cocoa中,如果某些类的对象大部分工作在架子上,而且具有可选的可配置行为 - 允许我们根据我们的需要定制它 - 它由委托完成STRONG>。即子类化UINavigationController的Instead我们告诉它的具体实例在哪里找到(为了更好的术语)它的自定义行为。

为什么呢?假设你有一个navigationController,一个tableView和一个textfield。 UINavigationController主要处理您的导航需求,但每次用户移动到新视图时,您都必须有一个疯狂的QUACK声音播放。 UITableView几乎就是你需要的所有表格,除了你真的希望首页表格中的第三行是其他行的高度的两倍。标准的,现成的UITextField几乎可以满足您的文本字段需求,除非您需要在用户面向North时才能编辑文本字段。处理此问题的一种方法是创建3个新类,自定义UINavigationController,自定义tableView和自定义文本字段,并使用它们。通过委托,我们可以按原样使用这些类,并且有一个对象是所有3个实例的委托 - 更清晰。

代表团主要是可选的,文档将告诉您何时,这取决于您以及您是否需要该自定义行为。