0

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

iBooks 视图类型选择器

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

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

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

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

我相信解决方案 A 和 D 在代码方面应该是最干净的,B 是最容易实现的。

4

2 回答 2

0

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

对于集合视图,

  • 外观可以使用 NIB 和applyLayoutAttributes:/或每种内容类型的自定义布局进行自定义(如果您想要不同的动画)。
  • 动作可以这样实现:长按手势识别器,使用locationInView:and获取最后一个按下的视图indexPathForItemAtPoint:,弹出 aUIMenuItem并将动作应用于视图(一种方法)。

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

于 2013-04-05T20:20:47.803 回答
0

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

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

于 2013-04-05T11:43:47.307 回答