使用视图和控制器快速迷路

时间:2012-01-16 20:59:16

标签: iphone xcode

我来自Windows Visual Studio(VS)背景,所以我发现Xcode环境,因为缺乏更好的描述而过于复杂。

我正在计划一个需要4个视图的应用程序(在VS中我称之为windows)。 1)主(起始)视图底部有一个工具栏,可打开3个视图中的任意一个。 2)视图A顶部有一个导航栏,用于“取消”和“完成”,返回主页。 3)视图B顶部有一个导航栏,用于“返回”,返回Main 4)视图C没有导航栏,但会使用DoubleTap返回Main。

我发现如果没有一个直截了当的例子将它拼凑在一起会很困惑。

我在哪里可以找到一些关于视图与控制器的清晰解释,它们各自用于什么,以及如何使用它们,最好是使用示例/教程/等?

在线是最好的,书籍很好。 我使用的是Xcode 4.2,没有故事板(兼容ios 4.2)。

感谢。

1 个答案:

答案 0 :(得分:4)

视图控制器和视图之间的一般区别是您可以独立于Xcode / Cocoa理解的东西 - 它是一种名为MVC(模型,视图,控制器)的设计模式。

在MVC中,您的应用程序结构分为3层:

1)模型是您的数据层,例如文件,数据库,网络服务以及独立于显示器的对象,例如用户。

2)视图就是你在屏幕上看到的。视图通常由层次结构中的多个子视图组成,例如窗口(这是一种视图)包含工具栏(另一种类型的视图)和一些按钮(每个视图),标签,文本字段等。这些都是观点。

3)控制器,又名视图控制器是将这两者连接在一起的粘合剂。例如,用户对象不知道如何显示自身,并且标签不知道用户对象,因此视图控制器的工作是告诉特定标签显示特定用户的名称。类似地,当您在文本字段中键入文本时,文本字段不知道文本是密码,因此控制器的工作是获取该文本并将其存储在正确的位置,或将其提交给正确的Web服务或者其他什么。

基本上,控制器会将您的模型数据转换为正确的格式,以便在您的视图中显示,并处理来自您的视图的反馈(按下按钮,输入文本等)并相应地修改您的模型。

在cocoa中,每个视图控制器都拥有一个主视图(它的“视图”属性),还可以管理该视图的子视图,如按钮,标签等。

通常,您的应用的每个屏幕都有一个视图控制器类。有时屏幕上具有标准行为的部分由其他视图控制器管理。

例如,导航栏由称为导航控制器的东西管理。导航控制器实际上管理一堆视图控制器以及导航栏视图本身。将视图控制器推入或弹出导航控制器堆栈时,它会确保显示当前视图控制器中的视图,并确保导航栏显示正确的标题。当您点击导航栏视图中的后退按钮时,导航控制器会接收该按钮事件,并将当前视图控制器(及其关联视图)弹出堆栈。

这种方法(MVC)的优点在于大大减少了你需要做的子类化的数量。屏幕上的每个按钮可能只是标准UIButton对象的一个​​实例。您不需要为每个按钮创建子类只是为了改变它的行为,因为按钮不需要知道按下它时会发生什么,它只是将该按钮委托给视图控制器进行管理。

通常,您很少需要创建自定义视图子类。几乎所有的应用程序都可以通过在屏幕上排列标准视图并使用自定义视图控制器子类来管理它们来构建。

Nibs / xibs对此特别有用,因为它们让您可视地布置视图,并使用拖放操作直观地将其操作(例如按钮点击)绑定到视图控制器上的方法。这样可以节省您使用无意义的布局代码填充视图控制器(创建一个带有这些坐标和此颜色的按钮并将其附加到此子视图等)。不幸的是,nib可能会让新开发人员感到困惑,因为他们隐藏了幕后发生的大量事情。

对于多屏幕应用程序,iOS提供了一组所谓的容器控制器,它们是管理多个子控制器的控制器。 UITabBarController和UINavigationController是主要的例子。 UITabBarController很好,如果你想要在几个屏幕之间进行选项,如果你有一个屏幕层次结构,用户可以在浏览器之间来回切换,那么UINavigationController就很好。