【问题标题】:Right Pattern for Multiple Table Views and Multiple Collection Views多个表视图和多个集合视图的正确模式
【发布时间】:2013-04-04 15:43:55
【问题描述】:

我需要实现具有 2 个不同视图的项目列表:文本列表和照片列表,类似于 iPad 上的 iBooks 所做的:

但是,我有 4 种不同类别的商品:电影、音乐、游戏和书籍,每一种都有不同的特点,需要不同的信息才能显示。用户将使用下拉菜单而不是标签栏更改类别,因为标签栏已在使用中(这将是应用程序的库部分)。

我的意图是对项目的文本列表使用表格视图,对照片列表使用集合视图。对于每个项目类别,表格视图和集合视图的数据源可能相同,因为集合视图只提供较少的信息。

我的问题是使用哪种模式。我可以:

  • A. 4 个表格视图控制器 + 4 个集合视图控制器
  • 乙。 1个表格视图控制器+1个集合视图控制器(分别管理1个表格视图和1个集合视图,有4种表格视图单元格,4种集合视图单元格)。
  • C. 1个表视图控制器+1个集合视图控制器(分别管理4个表视图和4个集合视图)
  • D. 4个视图控制器(每个管理1个表和1个集合视图,共享数据源)
  • E. 1 个视图控制器(管理所有内容、1 个表格视图和 1 个集合视图、4 个不同的表格视图单元格、4 个不同的集合视图单元格)。

我认为解决方案 A 和 D 在代码方面应该是最简洁的,B 是最容易实现的。

【问题讨论】:

    标签: ios cocoa-touch uitableview design-patterns uicollectionview


    【解决方案1】:

    我会使用 B 并且在添加新内容时尽量不要过多地触摸它们。

    对于集合视图,

    • 可以使用 NIB 自定义外观,也可以使用 applyLayoutAttributes: 和/或每种内容类型的自定义布局(以防您需要不同的动画)。
    • 动作可以这样实现:长按手势识别器,使用locationInView:indexPathForItemAtPoint:获取最后按下的视图,弹出UIMenuItem,然后在视图上应用动作(一种方法) .

    对于每种内容类型,我会将操作及其实现放在一个单独的类中。您可以使用命名约定“content-class-name + Actions”来查找此类,或使用控制器中的工厂模式来获取它。然后注入它需要的任何服务,并传递与启动该操作的视图相关的操作和模型类。这部分也适用于表格。

    【讨论】:

      【解决方案2】:

      我会推荐一种混合方法,使用 B 作为主要控制器,但对每种细胞使用控制器,并根据所选类别设置此控制器。

      更新:在对该主题进行更多重新思考后,我将使用选项 D。每个类别都有一个视图控制器,充当数据源并代表表格视图和集合视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-14
        • 2013-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        相关资源
        最近更新 更多