【问题标题】:Implementing a view controller that can handle two different view types实现一个可以处理两种不同视图类型的视图控制器
【发布时间】:2011-03-16 09:00:14
【问题描述】:

对不起,如果标题听起来令人困惑,但我想不出更好的办法。

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

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

我希望我做对了。在任何情况下它都有效;我能够毫无问题地重新实现数据源(如果需要),并且提供数据的代码与显示它的代码是分开的。

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

也许我可以编写一个带有泛型方法的抽象类并编写它的两个实现,一个用于滚动视图,一个用于 CoverFlow 视图,然后根据传递给它的参数在控制器中实例化这两者之一.这是实现这一目标的最佳方式吗?

我希望这不会太令人困惑,并且我的方法没有太多缺陷。谢谢。

【问题讨论】:

    标签: iphone model-view-controller


    【解决方案1】:

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

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

    在大多数应用程序中,控制器是最定制的,您不应该花费太多精力来防止重复。如果您发现自己在控制器之间重复了代码,那么很可能您的控制器中有不应该存在的模型或视图逻辑。

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

    【讨论】:

      【解决方案2】:

      也许我可以写一个摘要 具有泛型方法的类并编写 它的两种实现,一种用于 滚动视图和一个用于 CoverFlow 查看,然后实例化其中一个 两个在控制器中,基于 传递给它的参数。这是 实现这一目标的最佳方法?

      这听起来不错。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 2018-01-04
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        相关资源
        最近更新 更多