2011-07-18 11 views
2

私はアンケートを行うiPhoneアプリを持っています。アンケートはいくつかの質問で構成されています。iPhoneアプリのスーパー/サブクラスとビュー

私はクラスを作成しました。これは、アンケートの質問の数(これは外部データソースから取り込まれます)に基づいていくつかのオブジェクトをロードします。

これは問題なく動作します。

アプリは今、さらに反復を通過しているとの要件が少し複雑です。上記のプロトタイプは、同じ質問ビュー(すなわち、1つのタイプの質問)で質問を読み込む。しかし、いくつかのタイプの質問が存在します(スライダベース、テキスト入力など)。

質問を共有し、すべてのタイプのプロパティのサブセット:

質問はQuestionViewsは、データが入力されている方法が異なりますタイトル、ID、セクションIDと質問番号

を持っています。スライダを使用してデータを入力する必要があり、テキスト入力が必要なものがあります。

これはすぐにスーパークラス/サブクラス構造を叫ぶ:

Question 
    SliderQuestions 
    TextInputQuestions 
    etc 

私の質問は以下のとおりです。

1)どのように私はいくつかのデータ値に基づいてビューの特定のサブクラスをロードすることができますか?

クラスごとにViewおよびViewControllerを構築する必要がありますか?このスーパークラスのサブクラス構造をモデル化するにはどうすればよいですか?

私の混乱は、ビューとビューコントローラを作成することにあります。明らかに、スライダーを1つに追加し、テキスト入力を別のものに追加するなどの特定のコンポーネントの問題を処理する新しいビューが必要ですが、ビューごとに複製することなく共有データ(スーパークラスのプロパティ)を表示するにはどうすればよいですか?

+3

あなたはそのような文字列を比較することはできません。 ' - [NSString isEqualToString:]'メソッドを使うべきです。しかし、この場合は 'enum'が良いアプローチになるかもしれません。 –

答えて

0

あなたの質問に対する答えは:はい、あなたは異なる質問タイプについて別個のビューを持つことができます。回答からのデータが似ている場合は、スイッチを備えた単一のビューコントローラを使用して、a) 代替ビューをロードし、b)異なるタイプの応答を処理します(必要な場合)。

したがって、単一のビューコントローラ、別々のビューが最も簡単ですが、単一のビューを使用して異なるコントロールを表示/非表示にすることもできます。 プログラムによって表示されます。

1

tagを使用して、多くの場合UIViewを識別することをお勧めします。そうしないと、あなたは(私見)あなたはもう少し論理的でよりコンパクトなコードになりますswitchを設定することができますtag Sを使用して、後者のアプローチは、より多くの記述があるものの

[questionType isEqualToString:@"string"];

で文字列を比較することができます。