【问题标题】:Objective-C - Understanding view controllersObjective-C - 理解视图控制器
【发布时间】:2011-09-05 00:00:48
【问题描述】:

我了解视图控制器有助于控制应用程序中的多个视图,但我无法理解何时使用它们。

如果我的应用程序有一个主页、几个具有“层次结构”结构的视图,以及一个与层次结构无关的关于页面,我的应用程序应该有哪些文件? appdelegate、导航控制器和视图控制器?不止一个视图控制器?只是一个导航控制器?

另外,它们应该全部包含在一个 .xib 文件中还是多个 .xib 文件中?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: ios objective-c uiview uiviewcontroller


    【解决方案1】:

    一个好习惯是为您要显示的每个页面设置一个UIViewController。如果我了解您的应用程序的结构,您应该有一个主页(其中包含许多其他 UIViews)和另一个页面(关于页面)。如果这是真的,我建议两个UIViewControllers。

    UINavigationControllerUIViewController 的子类,可让您在页面之间“导航”。这不是绝对必要的,但建议使用(您也可以实现自己的自定义导航系统,但利用 Apple 为您提供的导航系统更容易)。另一个导航系统是基于UITabBarController的导航系统,如果你想看看的话。

    假设我了解了您应用的结构,您应该需要两个 .xib 文件,每个页面一个。

    应用代理在概念上与视图控制器不同,您只有一个应用代理,由 Xcode 自动创建(当然,您可以修改它以满足您的需要)。

    【讨论】:

    • 感谢您的回答。只是为了帮助我将其可视化,您认为 iPhone 上的联系人应用程序的项目会是什么样子?除了应用程序委托之外,它是否只是一个视图控制器类(.m 和 .h)和一个具有多个视图的 .xib 文件(即一个视图用于主列表,然后是另一个视图,其中包含所选人员的详细信息)?跨度>
    • 显然有一个UINavigationController 和三个UIViewControllers(带有三个.xib):在主页上有联系人列表,显示在UITableView 中。触摸联系人,您将移至辅助视图,您可以在其中查看联系人信息。另一个UIViewController 是您可以添加新联系人的页面所必需的。显然它可以有不同的结构,但它肯定是一种实现方式。
    【解决方案2】:

    每个“屏幕内容”(Apple 使用这个术语)都应该由它的 UIViewController 或更可能是它的子类来处理。视点控制器是处理视图出现或消失(进入/离开屏幕)、设备旋转、内存管理、导航到其他视图控制器等。如果您使用 IB 创建 UI,那么每个视图控制器很可能都有自己的 .xib 文件。

    每个视图控制器都有一个视图(它是view 属性),它充当每个“屏幕内容”的主视图,然后您可以在其中添加子视图。

    UINavigationControllerUITabBarcontroller 可以帮助您控制应用的层次结构。它们仅充当其他视图控制器的容器,并且不包含除导航栏或标签栏之外的任何 UI。使用标签栏控制器,您可以拥有多个视图控制器,它们的作用与浏览器标签完全相同。使用导航控制器,您可以拥有类似堆栈的导航,其中新的视图控制器从右向左推送,并在用户返回之前的视图控制器时从左向右弹出。您甚至可以在标签栏控制器内的导航控制器内拥有一个视图控制器。

    如果您不想使用标签栏或导航控制器,您可以通过使用presentModalViewController:animated: 以模态方式呈现它们并通过dismissModalViewControllerAnimated: 关闭视图控制器来导航它们。如果您为这些方法的动画参数发送YES,您将获得由视图控制器的modalTransitionStyle 属性指定的动画被呈现或关闭。可能的动画是从底部滑入(默认)、整个屏幕的水平翻转、淡入/淡出和半页卷曲。

    还有一些 Apple 提供的 UIViewController 子类可以帮助您更快地设置 UI,例如 UITableViewController,它基本上是一个视图控制器,其中包含一个表作为其主视图并符合 'UITableViewdataSourceand定义每个单元格的外观和包含的内容所需的委托协议。

    在 iPad 上,有一个额外的容器控制器 UISplitViewController 和一种使用 UIPopover 呈现新视图控制器的额外方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 2015-12-12
      相关资源
      最近更新 更多