我知道视图控制器可以帮助控制应用程序中的多个视图,但我无法理解何时使用它们。
如果我有一个带有主页的应用程序,几个具有“层次结构”结构的视图,以及一个与该层次结构没有关联的页面,那么我的应用程序应该有哪些文件? appdelegate,导航控制器和视图控制器?多个视图控制器?只是一个导航控制器?
此外,它们是否应包含在一个.xib文件或多个.xib文件中?
非常感谢任何帮助。
感谢。
答案 0 :(得分:5)
一个好习惯是为每个要显示的页面设置UIViewController
。如果我得到你的应用程序的结构,你应该有一个主页面(其中有许多其他UIView
)和另一个页面(关于页面)。如果这是真的,我建议两个UIViewController
。
UINavigationController
是UIViewController
的子类,可让您在页面之间“导航”。这并非严格必要但建议(您也可以实现自定义导航系统,但是利用Apple提供的功能更容易)。另一个导航系统是基于UITabBarController的导航系统,如果你想看一下。
假设我得到你的应用程序的结构,你应该需要两个.xib文件,每个页面一个。
app委托在概念上与视图控制器不同,你只需要一个由Xcode自动创建的app委托(当然,你可以修改它以满足你的需要)。
答案 1 :(得分:2)
每个“屏幕内容”(Apple使用此术语)应该由UIViewController
处理,或者更可能是它的子类。视点控制器用于处理视图出现或消失(进入/离开屏幕),设备旋转,内存管理,导航到其他视图控制器等。如果您使用IB创建UI,那么每个视图控制器很可能都有自己的.xib文件。
每个视图控制器都有一个视图(它的view
属性),作为每个“屏幕内容”的主视图,然后添加子视图。
UINavigationController
和UITabBarcontroller
可帮助您控制应用的层次结构。它们仅充当其他视图控制器的容器,并且不包含除导航栏或标签栏之外的任何UI。使用标签栏控制器,您可以拥有多个视图控制器,其操作方式与浏使用导航控制器,您可以进行类似堆栈的导航,其中新视图控制器从右向左推动,并在用户返回上一个视图控制器时从左向右弹出。您甚至可以在标签栏控制器内部的导航控制器内部使用视图控制器。
如果您不想使用标签栏或导航控制器,则可以使用presentModalViewController:animated:
以dismissModalViewControllerAnimated:
模式显示,并按YES
消除,以浏览视图控制器。如果您为这些方法的动画参数发送modalTransitionStyle
,您将获得由呈现或解除的视图控制器的UITableViewController
属性指定的动画。可能的动画是从底部(默认)滑动,整个屏幕水平翻转,淡入/淡出和半页卷曲。
还有一些Apple提供的UIViewController子类可以帮助您更快地设置UI,例如,它基本上是一个视图控制器,它包含一个表作为主视图并符合'UITableView
and
dataSource UISplitViewController
委托`协议,用于定义每个单元格的外观和内容。
在iPad上有一个额外的容器控制器UIPopover
以及另一种使用{{1}}呈现新视图控制器的方法。