2011-03-15 71 views
2

对不起,如果标题听起来令人困惑,但我不能想出更好的东西。实现可以处理两种不同视图类型的视图控制器

基本上我有一个视图控制器,管理一个分页滚动视图,它显示从数据库中提取的几个图像。我是MVC的新手,我尝试以最好的方式按照这种模式编写我的代码(我的经验仅仅基于查看其他人的代码并理解Apple的类如何工作,因此可能有缺陷;如果你能告诉我,我会很感激的)。

这就是我所做的:我有一个自定义视图类,其中包含UIScrollView,并且有两个公共属性:dataSourcedelegate。数据源对象必须符合我定义的协议;它会返回图像数量和图像本身。选定页面更改时,代表会收到通知。

我希望我说得对。无论如何,它的工作原理;我可以在没有任何问题的情况下重新实现数据源(如果需要),并将提供数据的代码与显示数据的代码分开。

但是现在我遇到了一个问题:我需要能够用尽可能少的代码复制的类似CoverFlow的视图替换分页滚动视图。我知道必须有更好的方法来实现这一点,而无需使用此CoverFlow视图创建另一个视图控制器类。这两个视图类具有相似的方法,并以类似的方式工作,所以使用相同的视图控制器代码而不是重复它是有意义的。

也许我可以用泛型方法编写一个抽象类并编写它的两个实现,一个用于滚动视图,另一个用于CoverFlow视图,然后基于传递给参数的参数在控制器中实例化其中的一个它。这是达到这个目标的最好方法吗?

我希望这不是太混乱,我的方法没有太多缺陷。谢谢。

回答

1

您通常需要单独的视图控制器为单独的视图,因为您最终不得不检查您在每个单一方法中使用哪种类型的视图。然后特殊情况蔓延,你的代码变得混乱。此外,你可能会决定在某个时候完全抛弃一种观点。代码越模块化越好。

模型 - 视图 - 控制器设计的关键思想是视图在逻辑上与数据模型分离。该模型应该是程序的实际核心,它应该通过控制器提供所有视图的数据。如果你已经正确地实现了这个设计,你就不会有太多的定制和很少的代码重复,因为这个模型会支持每一个可能的视图。

在大多数应用程序中,它是最具自定义性的控制器,您不应该花费很多精力来尝试防止重复。如果您发现自己在控制器之间重复了代码,那么您可能会在控制器中建模或查看不应该在其中的逻辑。

就你而言,它看起来像数据源对象与你的模型接口(就像UITableViewDataSource对象一样),并且由于两个视图使用相同的逻辑,所以如果你定义了合适的协议,你可以为两个视图使用相同的委托。每个视图都需要一个自定义委托来处理自定义,但这是您应该使用的委托设计模式的一部分。

1

也许可以写一个抽象 类包含通用方法和写的它 两个实现,一个用于 滚动视图和一个用于的CoverFlow 视图,然后实例化 两个中的一个控制器中的,基于传递给它的参数 。这是 达到这个最好的方法吗?

这听起来像一个体面的做法。

您也可以实现一个视图控制器来管理两种视图类型,在loadView中按需创建正确的视图。

相关问题