【问题标题】:Grasping the concept of UIviews and UIViewcontrollers掌握UIviews和UIViewcontrollers的概念
【发布时间】:2010-10-02 12:41:26
【问题描述】:

几周前,我开始研究 Iphone 应用程序开发,并且在不同设置下的大量 hello world 应用程序之后,我现在已经准备好我的第一个基于 Cocoa 中使用的 MVC 设计模式的应用程序。
这给我带来了很多问题,在阅读了关于 UIViews 和控制器的不同类参考之后,我一直在试图弄清楚我应该使用哪一个。

在我的应用程序中,我试图创建一个小矩形网格,每个矩形上都有不同的文本值,更具体地说,我试图创建一个简单的日历,它将显示一个月的所有日子一个网格。
每个矩形都是我命名为 Tile 的类的一个实例,在这个类中我想实现 drawRect 方法来为我绘制矩形并将文本值设置为它应该代表的日期。

为了实现这一点,我对应该如何完成进行了一些研究。
从我目前了解到的情况来看,UIViewcontrollers 并没有真正显示任何东西,它们基本上是坐在那里等待响应来自他们孩子的任何事件。 在我的应用程序中,我会将其转换为控制器,该控制器将响应磁贴上的每个触摸事件。

然而,UIView 也是一个容器,但它用于需要像 drawRect 这样的绘图方法的对象。如果我是正确的,这将转化为将容纳所有瓷砖的网格。

除了,我不知道我应该为每个图块使用什么子类,我觉得我真的在这里缺少一些基本知识,但我就是想不通。
如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

    标签: iphone objective-c xcode uiviewcontroller


    【解决方案1】:

    如果有两份苹果文件你应该阅读,一份关于UIViewControllers 的可以找到here 和一份关于UIViews 的可以找到here。正如您所提到的,UIViewController 更多的是与 iOS 系统集成,而不是一个可见的组件。它引用了UIView,而UIView 是从该视图控制器开始的可见元素树中的根节点。

    在 iOS 编程中,您实际上不需要担心绘制矩形,因为在大多数情况下,您将扩展知道如何绘制自己的元素,然后告诉它们去哪里。在这种情况下,基本可见元素是UIViewUIViews 有多种不同的类型(请参阅 UIView 编程指南链接中的图形),因此对于您的情况,您可以使用简单的 UIView 并将背景图像设置为您的日历框图形,并添加一个子视图输入UILabelUILabelUIView 的子类,所以你知道它也是可见的。

    一旦你掌握了这些概念(这可能需要很长时间)Interface Builder 就会开始变得更有意义,你可以开始用它做一些这些事情 - 并了解它的工作原理。本质上,它会创建 UIViewController 的层次结构,然后自动引用 UIViews 的层次结构。

    【讨论】:

    • 谢谢,我之前已经阅读了这些文件,但它们为我提供了如此多的信息,我不知道该去哪里找。
    • 您所说的关于视图层次结构的内容也很有意义,我认为这是缺少的基本信息。现在,我将尝试以编程方式完成大部分工作,并在掌握基本知识后查看 IB。
    【解决方案2】:

    Tile 应该是UIView 的子类,因为你想drawRect 你的“日子”。然后,您可以向UIViewController.view 添加任意数量的磁贴,并通过UIViewController 代码(.m 文件)对其进行操作。

    但是您可以将UILabels 添加到您的Tile 视图中,并通过设置它们的文本属性来操作它们。在这种情况下,您根本不需要覆盖 drawRect:UILabel 将为您完成其余的工作,但您必须以编程方式将此标签添加到您的 Tile(例如在 Tile 的 init 方法中)或在界面生成器中。在最后一种情况下,您必须使用 [[NSBundle mainBundle] loadNib:owner:options:] 方法从 XIB 加载它们。

    【讨论】:

    • 谢谢! UILabel 确实有道理。关于最后一部分,我对 nib 文件有相当基本的了解,但我不确定你在这里谈论的是哪一个。您从 viewcontrollers nib 文件在界面生成器中创建一个 UILabel,然后在每个图块中实现它,这就是您的意思吗?现在我正试图让它非常简单,不要过多地与 IB 混淆,因为感觉它会在引擎盖下添加很多东西。但我一定会记住的。谢谢。
    猜你喜欢
    • 2011-08-11
    • 2018-01-14
    • 2013-09-02
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多