自定义UIView和UIViewController最佳实践?

问题描述:

我目前有一个简单的iPhone应用程序加载UIView的自定义子类。目前在整个应用程序中只有一个控制器,尽管有几个UIView用于逻辑分离程序。自定义UIView和UIViewController最佳实践?

我目前的结构看起来是这样的:

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

我希望这是明确的;当然,冒号代表继承。

我的问题是这样的:我需要拦截最低级别的事件subSubView。我可以在应用程序控制器中做到这一点,如果我需要,但我应该有一个subSubViewController?我应该有一个subViewController吗?

如果是这样,有人可以指点一些手工操作吗?我当然可以创建这些类,但将它们连接到自定义视图似乎并不重要。除了保存窗口对象的主要笔尖外,我没有使用界面构建器。

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

我应该使用代表完成这一切吗?

任何在正确的方向微调将不胜感激。

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

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

因此,无论您有多少个子视图可供任何人查看,您最终只会在每个屏幕上显示一个控制器。

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

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

如果您需要每个子视图的高度自定义行为,则可以使用委托模式并为每个子视图分配一个不同的委托对象。该观点可能会陷入其自身的触动,并称其为自己的代表。

滚动视图实现自定义触摸行为可能会很棘手,因为scrollview陷阱触及的层次高于其他视图,因此它可以确定是否需要滚动。

+0

正是我需要知道的,谢谢。 – 2010-07-21 16:55:42