Objective-C - 理解视图控制器

时间:2011-09-05 00:00:48

标签: ios objective-c uiview uiviewcontroller

我知道视图控制器可以帮助控制应用程序中的多个视图,但我无法理解何时使用它们。

如果我有一个带有主页的应用程序,几个具有“层次结构”结构的视图,以及一个与该层次结构没有关联的页面,那么我的应用程序应该有哪些文件? appdelegate,导航控制器和视图控制器?多个视图控制器?只是一个导航控制器?

此外,它们是否应包含在一个.xib文件或多个.xib文件中?

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:5)

一个好习惯是为每个要显示的页面设置UIViewController。如果我得到你的应用程序的结构,你应该有一个主页面(其中有许多其他UIView)和另一个页面(关于页面)。如果这是真的,我建议两个UIViewController

UINavigationControllerUIViewController的子类,可让您在页面之间“导航”。这并非严格必要但建议(您也可以实现自定义导航系统,但是利用Apple提供的功能更容易)。另一个导航系统是基于UITabBarController的导航系统,如果你想看一下。

假设我得到你的应用程序的结构,你应该需要两个.xib文件,每个页面一个。

app委托在概念上与视图控制器不同,你只需要一个由Xcode自动创建的app委托(当然,你可以修改它以满足你的需要)。

答案 1 :(得分:2)

每个“屏幕内容”(Apple使用此术语)应该由UIViewController处理,或者更可能是它的子类。视点控制器用于处理视图出现或消失(进入/离开屏幕),设备旋转,内存管理,导航到其他视图控制器等。如果您使用IB创建UI,那么每个视图控制器很可能都有自己的.xib文件。

每个视图控制器都有一个视图(它的view属性),作为每个“屏幕内容”的主视图,然后添加子视图。

UINavigationControllerUITabBarcontroller可帮助您控制应用的层次结构。它们仅充当其他视图控制器的容器,并且不包含除导航栏或标签栏之外的任何UI。使用标签栏控制器,您可以拥有多个视图控制器,其操作方式与浏使用导航控制器,您可以进行类似堆栈的导航,其中新视图控制器从右向左推动,并在用户返回上一个视图控制器时从左向右弹出。您甚至可以在标签栏控制器内部的导航控制器内部使用视图控制器。

如果您不想使用标签栏或导航控制器,则可以使用presentModalViewController:animated:dismissModalViewControllerAnimated:模式显示,并按YES消除,以浏览视图控制器。如果您为这些方法的动画参数发送modalTransitionStyle,您将获得由呈现或解除的视图控制器的UITableViewController属性指定的动画。可能的动画是从底部(默认)滑动,整个屏幕水平翻转,淡入/淡出和半页卷曲。

还有一些Apple提供的UIViewController子类可以帮助您更快地设置UI,例如,它基本上是一个视图控制器,它包含一个表作为主视图并符合'UITableView and dataSource UISplitViewController委托`协议,用于定义每个单元格的外观和内容。

在iPad上有一个额外的容器控制器UIPopover以及另一种使用{{1}}呈现新视图控制器的方法。