掌握UIviews和UIView控制器的概念

时间:2010-10-02 12:41:27

标签: iphone objective-c xcode uiviewcontroller

几个星期前,我开始研究Iphone应用程序开发,在不同设置中的大量hello world应用程序之后,我现在已准备好基于Cocoa中使用的MVC设计模式的第一个应用程序。
这为我打开了很多问题,在阅读了关于UIViews和控制器的不同类引用后,我仍然试图弄清楚应该使用哪一个。

在我的应用程序中,我正在尝试创建一个小矩形网格,每个矩形具有不同的文本值,更具体地说,我正在尝试创建一个简单的日历,它将显示一个月中的所有日期一个网格。
每个矩形都是一个名为Tile的类的实例,在这个类中我想实现drawRect方法为我绘制矩形并将文本值设置为它应该代表的那一天。

为了实现这一点,我已经就如何做到这一点进行了一些研究。
从我到目前为止所学到的是,UIView控制器并没有真正展示任何东西,他们基本上坐在那里等待回应他们孩子的任何事件。 在我的应用程序中,我会将其转换为控制器,它将响应磁贴上的每个touchevent。

然而,UIView也是一个容器,但是对于需要绘制像drawRect这样的方法的对象。如果我是正确的话,这将转换为将保存所有瓷砖的网格。

除了,我不知道我应该为每个瓷砖使用什么子类,我感觉我真的错过了一些基本的知识,但我只是想不出来。如果有人能指出我正确的方向,我真的很感激。

2 个答案:

答案 0 :(得分:2)

如果您应该阅读任何两个苹果文档,那么可以找到UIViewController的{​​{1}}一个here以及可以找到UIView的文件{{} 3}}。正如您所提到的,UIViewController更多的是与iOS系统集成而不是可见组件。它引用了UIViewUIView是从该View Controller开始的元素的可见树中的根节点。

在iOS编程中,您不必担心绘制矩形,因为在大多数情况下,您将扩展知道如何绘制自己的元素,然后告诉他们去哪里。在这种情况下,基本的可见元素是UIView。有许多不同类型的UIView(请参阅UIView编程指南链接中的图形),因此对于您的情况,您可以使用简单的UIView,并将背景图像设置为日历框图形,并且添加类型为UILabel的子视图。 UILabelUIView的子类,因此您知道它也是可见的。

一旦你掌握了这些概念(这可能需要很长时间),Interface Builder将开始变得更有意义,你可以开始用它做一些这些事情 - 并了解它的工作原理。从本质上讲,它会创建UIViewController的层次结构,自动引用UIView的层次结构,然后是你。

答案 1 :(得分:1)

Tile应该是UIView的子类,因为您想要drawRect您的“日期”。然后,您可以根据需要向UIViewController.view添加任意数量的平铺,并从UIViewController代码(.m文件)中操作它们。

但您可以将UILabels添加到Tile视图中,并通过设置其文本属性来操纵它们。在这种情况下,您根本不需要覆盖drawRect:UILabel将为您完成剩下的工作,但您必须以编程方式将此标签添加到Tile(例如,在平铺中) init方法)或在Interface Builder中。在最后一种情况下,您必须使用[[NSBundle mainBundle] loadNib:owner:options:]方法从XIB加载它们。