ios - iOS 中的 View 管理

标签 ios view controller

我已经创建了几个 iPhone 和 iPad 应用程序,但是我已经使用另一个支持 api 或使用开源库(如 Cocos2d 支持场景管理和屏幕转换)编写了它们。我觉得我还没有完全弄清楚如果没有这些外部 api 应该如何完成屏幕/场景/ View 管理。有人可以非常简单但清楚地解释应用程序如何管理屏幕转换和/或向我指出一个很好的引用,以尽可能少地展示这一点吗?

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

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

最佳答案

Should I be using UIViewController-derived classes to separate the screen-by-screen functionality of my app?



是的。

And would my app essentially hand control over to one of these view controllers which would then construct my scene with its components?



是的,尽管许多 VC 只是从 nib 获取 View 树,并关注核心 Controller 职责: 1. 将模型更改传播到各种 View 字段; 2. 将 View 事件传播回模型上的适当操作。我建议掌握 InterfaceBuilder 的窍门。它不完美且令人讨厌,但它可以为您节省数小时的工作和大量代码。

How do I switch to the relevant view controller?



多种方式:
  • 如果您的 VC 托管在导航 Controller 中,[[self navigationController] pushViewController:theNextVC animated:YES]是一个常见的成语。
  • 在一组没有明确层次结构的 VC 之间切换,最好使用 UITabBarController 来完成。 .
  • 如果你想做模态堆叠,[self presentModalViewController:theNextVC animated:YES]是怎么回事。但是,比一两个更深的模态堆栈变得笨拙。
  • 呈现第一个 VC 在 4.x 中通过将其分配给窗口的 rootViewController 属性来完成(应用程序委托(delegate)可以这样做,或者主 nib 可以);或者对于 pre-4,通常在应用程序委托(delegate)中找到的传统方式:[myMainWindow addSubview:[myInitialVC view]] .
  • 一些专门的苹果提供的 VC(视频、照片选择器)有自己的演示方法。

  • 请注意,对于前两种方法,如果您想要行为而不是 UI 小部件,您可以隐藏导航栏或标签栏并以编程方式执行所有操作。

    should I expect loadView to be called as a result?



    会的,但你的大部分“我现在出现了!”逻辑属于 viewWillAppear: (在过渡动画开始之前调用,当 View 还没有父 View 时)和viewDidAppear: (在动画之后调用,当 View 完全可见时。)loadView当您的 VC 认为该 View 将很快需要时调用一次,并且不会再次调用,除非低内存条件转储 View 并需要重新创建。

    覆盖 loadView当您想用其他一些 View 树构造方法完全替换 nib 加载时。我开始这样做,但很少这样做了。

    覆盖 viewDidLoad当您仍然希望正常的 nib 加载发生,但也想自己做一些 View 树构建/后处理时。这就是我发现自己 99% 的时间都在做的事情。

    when some trigger calls for moving to, say, screen B, would a call be made to 'transition out' my views, then call forth some other view controller to 'set up your views' and transition them in?



    如果您使用前面列出的任何演示方法,则转换会发生在您身上。您需要做的就是实现 viewWill/DidAppear 和 friend ,以便在它发生时得到通知。

    您可能希望调查“TheElements”示例项目(在 xcode 文档中搜索“元素”)根据要求,它不使用 nib;它以艰难的方式在代码中设置所有内容。它有很好的使用 TabBarController 和 NavigationController 的例子,并以或多或少推荐的方式在 VC 之间划分责任。

    关于ios - iOS 中的 View 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4870219/

    相关文章:

    iphone - 按下快门后立即保存图像 iOS

    ios - Swift - 函数参数中的闭包

    iOS 7/8 内置发布到 Facebook 的方法

    ios - 无法在不重新加载 UITableView 的情况下更改原型(prototype)单元格 UIButton 图像

    AngularJS:如何在 AngularJS 中将数据从 View 传递到 Controller

    controller - 从 grails Controller 获取请求 URL

    c# - 为什么我的抽象基 Controller 中的 User(如 User.Identity.Name)为 null?

    Android - 扩展 ImageView 的最佳实现

    swift - 使用堆栈 View 时的对齐问题

    Android:如何处理长文本