2011-07-18 25 views
2

我有一個iPhone應用程序提供調查問卷。問卷由幾個問題組成。iPhone/iPad應用程序中的超級/子類和視圖

我創建了一個QuestionnaireViewController類,它根據問卷數量(這是從外部數據源提取的)中的問題數加載多個QuestionViewController對象。

這工作正常。

該應用程序現在正在經歷進一步的迭代,並且要求稍微複雜一些。上述原型用相同的問題視圖加載問題(即一種類型的問題)。然而存在幾種類型的問題(基於滑塊,文本輸入等)。

所有類型的問題,共享屬性的子集:

一個問題,有一個標題,ID,sectionId和題號

的QuestionViews將在輸入數據的方式不同。有些需要使用滑塊輸入數據,而有些需要文本輸入。

這立即尖叫的超類/子類結構:

Question 
    SliderQuestions 
    TextInputQuestions 
    etc 

我的問題是:

1)我怎樣才能加載基於一些數據值的視圖的具體子類?

例如

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

我是否必須爲每個類構建一個View和ViewController?我怎樣才能建模這個超類的子類結構?

我的困惑在於創建視圖和視圖控制器。很顯然,我需要一個新視圖來處理特定問題的組件,比如向一個滑塊添加滑塊,向另一個文本輸入文本,但是如何顯示共享數據(超類屬性)而不必爲每個視圖重複?

+3

你不能比較那樣的字符串。你應該使用' - [NSString isEqualToString:]'方法。不過,在這種情況下,'enum'可能是更好的方法。 – 2011-07-18 18:34:09

回答

0

您的問題的答案是:是的,您可以爲不同的問題類型分別查看。如果答案中的數據相似,我將使用單個視圖控制器,並切換到a) 加載備用視圖,以及b)處理不同類型的響應(如有必要)。

所以,單視圖控制器,單獨的視圖將是最簡單的,但你也可以使用單個視圖並以編程方式顯示/隱藏不同的控件 。

1

我建議您考慮使用tag s來確定UIView s,如果您有很多人的話。否則,你可以用

[questionType isEqualToString:@"string"];

雖然後一種方法更說明比較字符串,使用tag旨意讓你建立一個switch,這使得代碼有點更符合邏輯,更緊湊的(恕我直言) 。

相關問題