【问题标题】:Custom UIView and UIViewController best practices?自定义 UIView 和 UIViewController 最佳实践?
【发布时间】:2010-07-21 14:15:25
【问题描述】:

我目前有一个简单的 iPhone 应用程序,它加载 UIView 的自定义子类。整个应用程序目前只有一个控制器,尽管有几个 UIView 可以在逻辑上分离程序。

我目前的结构是这样的:

mainView : UIScrollView
    \__ has one subView : myCustomUIView : UIView
            \__ has many subSubView : myOtherCustomUIView : UIView

我希望这很清楚;当然,冒号代表继承。

我的问题是:我需要拦截最低级别的事件,subSubView。如果需要,我可以在应用程序控制器中执行此操作,但我应该有一个 subSubViewController 吗?我也应该有一个 subViewController 吗?

如果是这样,有人可以为我指出一些手动执行此操作的参考吗?我当然可以创建这些类,但是将它们连接到自定义视图似乎并不简单。除了包含窗口对象的主笔尖之外,我根本没有使用界面构建器。

我的主要困惑源于当我将视图嵌套在具有不同控制器的视图中时会发生什么。所以假设我确实有一个 subSubViewController,但 mainView 仍然有它的 mainViewController。由于 subSubView 包含在 mainView 中,这不会引起一些问题吗?

我是否应该为此使用委托?

我们将不胜感激。

【问题讨论】:

    标签: iphone cocoa-touch uiview uiviewcontroller


    【解决方案1】:

    视图和视图控制器成对存在。每个视图控制器控制一个视图和视图的子视图。这是必要的,因为视图控制器位于事件的响应者链中。如果多个视图控制器在同一个视图中处于活动状态,则响应者链会变得混乱。

    标准视图控制器没有subController 属性,并且不了解同一链中是否有另一个控制器处于活动状态。导航和标签栏控制器的存在正是为了处理层次控制器。但是,他们通过将一对视图/视图控制器交换为另一对来做到这一点。您不能使用导航或标签栏控制器为子视图提供不同的控制器。

    因此,无论您对任何人的视图有多少子视图,最终每个屏幕都只有一个控制器。

    您可能需要重新考虑您的设计。如果每个子视图都需要高度可定制的行为,您可能希望将它们移动到控制器层次结构中的各个视图,例如在主-细节设计模式中。

    如果您必须在同一屏幕上显示所有子视图,那么我建议您查看 UITableView 和 UITableViewController 如何处理事情。 (您也许可以只使用修改后的 tableview。) tableview 是一个滚动视图,包含单元格、节标题、页眉和页脚的多个子视图。它通过捕获来自 tableview 的触摸并确定触摸了哪个单元格视图然后采取适当的操作来管理这一点。

    如果您需要对每个子视图进行高度自定义的行为,您可以使用委托模式并为每个子视图分配不同的委托对象。视图可以捕获它自己的触摸并调用它自己的委托。

    滚动视图实现自定义触摸行为可能会很棘手,因为滚动视图在比其他视图更高的级别捕获触摸,以便它可以确定是否需要滚动。

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 2010-12-19
      • 1970-01-01
      相关资源
      最近更新 更多