iOS中的视图管理

iOS中的视图管理,ios,view,controller,Ios,View,Controller,我已经创建了两个iPhone和iPad应用程序,但我要么用另一个支持api编写了它们,要么用开源库编写了它们,比如支持场景管理和屏幕转换的Cocos2d。我觉得我还没有完全弄明白,如果没有这些外部API,屏幕/场景/视图管理应该如何进行。有人能简单但清楚地解释一下应用程序如何管理屏幕过渡和/或给我指出一个好的参考资料,以尽可能少的混乱来演示这一点吗 我是否应该使用UIViewController派生类来分离应用程序的逐屏功能(除了已经用于处理导航控制器等多屏操作的功能)?我的应用程序本质上会将控

我已经创建了两个iPhone和iPad应用程序,但我要么用另一个支持api编写了它们,要么用开源库编写了它们,比如支持场景管理和屏幕转换的Cocos2d。我觉得我还没有完全弄明白,如果没有这些外部API,屏幕/场景/视图管理应该如何进行。有人能简单但清楚地解释一下应用程序如何管理屏幕过渡和/或给我指出一个好的参考资料,以尽可能少的混乱来演示这一点吗

我是否应该使用UIViewController派生类来分离应用程序的逐屏功能(除了已经用于处理导航控制器等多屏操作的功能)?我的应用程序本质上会将控制权交给这些视图控制器中的一个,然后这些控制器将用其组件(如标签、按钮、任何视图)构建我的场景。如何切换到相关的视图控制器,以及是否应期望调用loadView?然后,当一些触发器调用移动到(比如)屏幕B时,是否会调用“转换出”我的视图,然后调用其他视图控制器“设置视图”并将它们转换到屏幕B


如果有一个示例程序能够真正说明这一点,最好没有界面生成器,那将是理想的。

基本控制器有两个基本选项,即UITabBarController或UINavigationController。(您可以将UINavigationController放在UITabBarController中,但不能反过来)

如果您有一个UIAbbarController,最简单的方法是为每个选项卡分配不同的视图控制器(UIViewController子类)。UITabBarController将处理它们之间的转换,并调用VIEWWILLEXPEND等方法

使用UINavigationController,可以设置rootViewController。然后,该视图控制器负责调用
[self.navigationController pushViewController:animated:
。这通常通过UITableViewController完成。UINavigationController将调用ViewWillExample等方法

显示视图控制器的最后一个选项是以模式显示它。这时会弹出一个屏幕来填充屏幕。您可以将其设置为从底部向上、翻转或淡入。为此,请创建视图控制器并调用
-[UIViewController presentModalViewController:animated:


除此之外,大多数视图控制器一次只能在屏幕上显示一个(iPad除外)。使用子类UITableView和UIScrollView,或仅使用UITableView。每个视图控制器应独立于其容器。这意味着您可以在UINavigationController上推送相同的视图控制器,或将其设置为UIDABBARCONTROLLER上的选项卡,或以模式显示它。

基本控制器有两个基本选项,即UIDABBARCONTROLLER或UINavigationController。(您可以将UINavigationController放在UITabBarController中,但不能反过来)

如果您有一个UIAbbarController,最简单的方法是为每个选项卡分配不同的视图控制器(UIViewController子类)。UITabBarController将处理它们之间的转换,并调用VIEWWILLEXPEND等方法

使用UINavigationController,可以设置rootViewController。然后,该视图控制器负责调用
[self.navigationController pushViewController:animated:
。这通常通过UITableViewController完成。UINavigationController将调用ViewWillExample等方法

显示视图控制器的最后一个选项是以模式显示它。这时会弹出一个屏幕来填充屏幕。您可以将其设置为从底部向上、翻转或淡入。为此,请创建视图控制器并调用
-[UIViewController presentModalViewController:animated:

除此之外,大多数视图控制器一次只能在屏幕上显示一个(iPad除外)。使用子类UITableView和UIScrollView,或仅使用UITableView。每个视图控制器应独立于其容器。这意味着您可以在UINavigationController上推送相同的视图控制器,或将其设置为UITabBarController上的选项卡,或以模式显示它

我应该用吗 UIViewController派生类以 一屏一屏地分开 我的应用程序的功能

我的应用程序是否真的需要手动操作 控制这些视图中的一个 然后构造的控制器 我的场景及其组件

是的,尽管许多风投公司只是从nib获取他们的视图树,并且关心核心控制器的职责:1。将模型更改传播到各种视图字段中;二,。将视图事件传播回模型上的适当操作。我建议掌握InterfaceBuilder的诀窍。它不完美,令人讨厌,但它可以节省您的工作时间和大量的代码

如何切换到相关的视图控制器

有几种方法:

  • 如果您的VCs托管在导航控制器中,
    [[self-navigationController]pushViewController:theNextVC animated:YES]
    是一个常见的习惯用法
  • 在一组VCs之间切换,如果它们之间没有明确的层次结构,最好使用
    UITabBarController
  • 如果您想进行模式堆叠,
    [self-presentModalViewController:theNextVC-animated:YES]
    就是这样做的。但是,比一两个更深的模态堆栈会变得笨拙
  • 在4.x中,通过将第一个VC分配给窗口的rootViewController属性(应用程序代理可以这样做,或者主nib可以这样做)来展示它;或者对于pre-4,通常在应用程序委托中找到的传统方式:
    [myMainWindow addSubview:[myInitialVC视图]]
  • 一些苹果公司提供的专业VCs(视频、照片采集器)有自己的演示方法
请注意,对于前两个方法,如果您想要的是行为而不是t