iPhone应用程序中的超级/子类和视图

时间:2011-07-18 18:30:39

标签: iphone objective-c xcode

我有一个提供调查问卷的iPhone应用程序。调查问卷包含几个问题。

我创建了一个QuestionnaireViewController类,根据调查问卷中的问题数量加载了几个QuestionViewController个对象(这是从外部数据源中提取的)。

这很好用。

该应用程序现在正在进行进一步的迭代,需求稍微复杂一些。上述原型用相同的问题视图(即一种类型的问题)加载问题。但是存在几种类型的问题(基于滑块,文本输入等)。

所有类型的问题都共享属性的一部分:

问题有标题,id,sectionId和问题编号

QuestionViews在数据输入方式上有所不同。有些需要使用滑块输入数据,而有些需要文本输入。

这会立即尖叫超类/子类结构:

Question
  SliderQuestions
  TextInputQuestions
  etc

我的问题是:

1)如何根据某些数据值加载视图的特定子类?

e.g。

if ([questionType isEqualToString:@"slider"]) {
  //load slider view
} else if ([questionType isEqualToString:@"textInput"]) {
  //load text input view
}

我是否必须为每个类构建一个View AND ViewController?我如何为这个超类子类结构建模?

在创建视图和查看控制器方面,我的困惑在于。显然我需要一个新视图来处理特定组件的问题,例如向一个添加滑块和向另一个添加文本输入,但是如何显示共享数据(超类属性)而不必为每个视图复制?

2 个答案:

答案 0 :(得分:1)

如果您有很多tag,我建议您考虑使用UIView来识别[questionType isEqualToString:@"string"];。否则,您可以将字符串与

进行比较

tag

虽然后一种方法有更多描述,但使用switch s将允许您设置{{1}},这使代码更合理,更紧凑(恕我直言)。

答案 1 :(得分:0)

您的问题的答案是:是的,您可以针对不同的问题类型提供单独的视图。如果答案中的数据相似,我会使用带有开关的单个视图控制器来a) 加载备用视图和b)处理不同类型的响应(如有必要)。

因此,单视图控制器,单独的视图将是最简单的,但您也可以使用单个视图并显示/隐藏不同的控件 编程方式。