多个表视图和多个集合视图的右模式

时间:2013-04-04 15:43:55

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

我需要实现一个包含2种不同视图的项目列表:文本列表和照片列表,类似于iPad上的iBooks:

iBooks view type selector

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

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

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

  • 甲。 4个表视图控制器+ 4个集合视图控制器
  • B中。 1个表视图控制器+ 1个集合视图控制器(分别管理1个表视图和1个集合视图,有4种类型的表视图单元,4种类型的集合视图单元)。
  • ℃。 1个表视图控制器+ 1个集合视图控制器(分别管理4个表视图和4个集合视图)
  • d。 4个视图控制器(每个管理1个表和1个集合视图,共享数据源)
  • 电子。 1个视图控制器(管理所有内容,1个表视图和1个集合视图,4个不同的表视图单元格,4个不同的集合视图单元格)。

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

2 个答案:

答案 0 :(得分:0)

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

更新:在主题中重新考虑更多后,我将使用选项D.每个类别的一个视图控制器,充当表视图和集合视图的数据源和委托。

答案 1 :(得分:0)

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

对于集合视图,

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

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