iPhone One控制器,多个视图

时间:2009-10-22 06:21:20

标签: iphone objective-c cocoa-touch

我是iPhone开发的新手,我想知道如何从单个控制器加载多个视图。

我来自c#背景,仍然试图了解ObjC和iPhone世界中的工作原理。

作为我想要实现的基本示例,假设我有一个ClockController,时钟控制器具有计算时间的基本方法。

现在我想做的是让这个控制器能够渲染任意数量的支持ClockContollers底层接口的视图。

假设我有一个视图将时钟呈现为数字输出,另一个视图将其呈现为模拟显示(我知道的基本示例)。

如何实现这一目标?

很抱歉,如果这是一个非常基本的问题,但我对此很新。

提前致谢

2 个答案:

答案 0 :(得分:2)

以下是我对如何将MVC应用于您的示例的理解:
您在屏幕上绘制的时钟是内部视图,每个视图都由时钟视图控制器类的实例支持。这些控制器每个都与时钟模型交互,并在适当时更新其视图。在这个类中,将设置一个属性来确定时钟是数字还是模拟 听起来你的“ClockController”实际上是一个模型/数据类。您只能拥有此模型类的一个实例,或者每个时钟视图控制器都有一个实例(如果它们的时间不同)。

答案 1 :(得分:1)

在我的应用程序中,我有许多单个视图控制器的实例,然后使用不同或多个视图来显示UI。您可以使用addSubView获取视图及其所有子视图并将其添加到视图控制器,并使用removeFromSuperview删除该视图及其所有子视图。如果视图仅显示信息并且子类化以处理与视图控制器必须处理的其他视图的差异,则此方法很有效。在这种情况下,模拟时钟视图必须以一种方式绘制自己,而数字时钟视图则在另一种方式中绘制自己。控制器只需要告诉每个视图时间是什么,并且视图处理到视觉数据的转换。如果您的视图接受以用户形式拖动模拟指针来设置警报的输入,则视图子类需要读取该输入,然后转换为警报时间并将其传递回视图控制器。控制器不需要知道用户正在与哪种类型的时钟交互,而只需要看到它需要添加到其警报队列的闹钟时间。

但是,当我的视图使用非常不同的UI或用于不同目的时,我通常更喜欢每组视图都有一个视图控制器。基本上,我尝试将我的视图用作显示器,并将viewControllers用作与该视图相关的数据管理器(以及可由相同数据支持的任何其他视图)。

例如,我的游戏有一个用于播放的视图控制器,另一个用于高分表,另一个用于设置。