1

我是 obj-c/iOS 的新手,我在概念上至少无法理解 viewControllers。我已经阅读了很多 Apple Doc,我什至在 xCode 中在某种程度上使用了 viewController,但我仍然不太了解它们是什么,或者使用它们的最佳方法是什么。

多年来,我一直是一名 AS3 开发人员,所以我的思想在 MovieClips/Sprites 和显示列表的上下文中工作,以在屏幕上获取图形。

好吧,据我了解...

  1. viewController 是一种以某种方式处理图形然后允许您对它们做某事的类?最基本的意义是什么?
  2. 您似乎将 viewControllers 添加到 Window 类,我猜这有点像将显示对象添加到显示列表?
  3. 从最基本的意义上说,viewController 为您做了什么?
  4. 是否有某些事情你绝对不能用它们做或不应该用它们做?
  5. viewControllers 是否需要以某种方式连接到 iOS 框架的其余部分才能运行(除了添加到窗口中)。
  6. 他们究竟如何使用数据?(我已经阅读了 MVC,我知道从概念上讲这是一个稍微不同的问题)据我所知,您不会将数据硬编码到 viewController 中,那么 viewController 如何访问任何静态数据?
  7. 假设我只是想在屏幕上显示一个图像,那么 viewController 在这个过程中究竟会扮演什么角色?它只是处理该过程的一小部分,还是整个节目并处理所有事情?
  8. 一个 viewController 可以处理多个图像吗?就像它的术语一样,是屏幕上所有图像的“控制器”,还是一次处理一个图像?
  9. 什么是与它处理的图像的 viewControllers 连接?它包含对它们的引用?

我正在使用有帮助的 Sparrow 框架,但我仍然希望能够了解 viewController 是什么,因此我知道如何正确使用它们。

哈,我为以上内容道歉,我知道我一定看起来完全糊涂了 :) 感谢您的任何建议。

4

3 回答 3

3

希望这可以帮助你:

  1. viewController 是一种以某种方式处理图形然后允许您对它们做某事的类?

    它是视图(Xib 文件)和数据(可以是 CoreData 或您在后端使用的任何内容)之间的粘合剂。您在视图中使用的所有 UI 元素通常定义为控制器中的属性以访问它们。

  2. 最基本的意义是什么?您似乎将 viewControllers 添加到 Window 类,我猜这有点像将显示对象添加到显示列表?

    我真的不了解 AS3,所以我无法将显示列表与 ViewControllers 进行比较。但基本上 ViewController 可以处理视图之间的不同类型的转换并访问(设置/读取)视图中显示的数据。

  3. 从最基本的意义上说,viewController 为您做了什么?

    就像我上面写的一样。最基本的意义是它们解释用户在视图上所做的事情,并根据用户的操作改变模型。

  4. 是否有某些事情你绝对不能用它们做或不应该用它们做?

    总是很难保持模型和控制器之间的边界。他们彼此非常接近。所以我通常尝试将所有逻辑东西(如计算、数据库访问等)重新分配给模型部分。但是当然,您正在控制器中使用这些外部类。

  5. viewControllers 是否需要以某种方式连接到 iOS 框架的其余部分才能运行(除了添加到窗口中)。

    就像您已经编写了 ViewController 需要连接到视图一样。否则就没有多大意义了。UIViewController 有不同的子类型,例如 UINavigationController,您可能需要重写一些其他方法来提供这些特殊子类型所需的全部功能。

  6. 他们究竟如何使用数据?(我已经阅读了 MVC,我知道从概念上讲这是一个稍微不同的问题)据我所知,您不会将数据硬编码到 viewController 中,那么 viewController 如何访问任何静态数据?

    可能有不同的方法来存储数据。最简单的方法是将数据直接存储在 UIViewController 中。这可能是一个自定义类,它是数据的容器。所有的变化都直接写入这个类并由 UIViewController 显示。但在大多数情况下,使用 CoreData 是有意义的(它负责将数据读/写到 sqlite 数据库中)。您可以将 CoreData 视为您的模型,并且 UIViewController 从那里获取数据并将 UIViewController 从 View 接收到的数据传递回给它。

  7. 假设我只是想在屏幕上显示一个图像,那么 viewController 在这个过程中究竟会扮演什么角色?它只是处理该过程的一小部分,还是整个节目并处理所有事情?

    UIViewController 将存储一个内部属性 (UIImageView *),该属性位于 Interface Builder 中,与您在 Xib 文件中创建的 UIImageView 连接。因此,通过这些属性,您可以通过控制器更改图像。

  8. 一个 viewController 可以处理多个图像吗?就像它的术语一样,是屏幕上所有图像的“控制器”,还是一次处理一个图像?

    是的,这不是什么大问题。您可以拥有任意数量的图像。您只需要在 UIViewController 中定义属性并链接到视图。

  9. 什么是与它处理的图像的 viewControllers 连接?它包含对它们的引用?

    是的,它就像对 UIElement 的引用。然后,您可以直接从 UIViewController 更改所需的 UIImageView 的任何属性

一些有用的链接:

于 2012-10-19T12:02:12.337 回答
1

简而言之,视图控制器是 MVC 模式中的控制器。请在进一步阅读之前检查此链接,以便您了解此模式的最新信息:

http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

好的,基本上一个控制器管理着一组视图。它还从您的模型中获取数据并设置视图的状态。重要的是要注意视图对您的模型(您的数据)一无所知,而模型对您的视图一无所知。控制器还从视图接收事件并决定如何相应地更改模型。它本质上是管理视图和模型之间的同步。

有一些技术可以帮助实现这一点,例如 KVO 和键值绑定。谷歌搜索将帮助你。

还有一件事。除了控制器之外,应用程序的任何其他部分都不应访问您的视图。因此,通常在应用程序中,控制器倾向于相互通信,例如通过导航控制器下的控制器之间的转换或委托模式。因此,您的应用程序主干往往是相互交谈的控制器。

于 2012-10-19T14:46:52.913 回答
1

我建议您检查: https ://stackoverflow.com/questions/1939/how-to-articles-for-iphone-development-and-objective-c

以下是您的问题的答案:

  1. 不,它不处理图形。它是MVC设计模式的控制器。它处理其内容(例如视图)和与之链接的数据的生命周期。
  2. AUIViewController被设置为 的根UIWindow。例如,aUINavigationController是用于处理导航的UIViewController堆栈的子类。UIViewController
  3. (1) 中的响应
  4. 请尝试更具体地说明这个问题。
  5. 正如已经评论过的,如果您使用已经内置的组件,例如UINavigationControlleror ,它会很有用UITabBarController
  6. 例如,您可以将数据放在实例变量中,并将它们显示在包含的UIView.
  7. UIView附加到您的遗嘱UIViewController中包含一个UIImageView. 您UIViewController将与它建立联系,以便进行所需的任何更改,例如,在用户按下按钮时更改图像。
  8. 它可以包含多个UIViews,因此可以包含多个UIImageViews(它是 的子类UIView
  9. 正如所评论的,它们将包含在一个上,UIImageView并且将以编程方式或与一个IBOutlet.
于 2012-10-19T11:56:56.130 回答