2011-07-07 8 views
0

ここで否定的なコメントについては、私は小さなステップで私の質問をsimplfy;IphoneはカスタムUIobjectを作成します

私は、Webサービスと通信し、xmlを解析し、xmlを解析し、適切なビューコンポーネントをマップするビューベースのアプリケーションを持っています(例えば、datepickerで日付を表示する場合は2つの値にセグメント化されたコントロール、pickerviewなどの場合はさらに多くのページを持つ動的な質問です)。

1アプリが(各ページごとの質問の数に制限があることができます)XML

2-解析XMLを受信し、最新の未回答の質問を取得し、それぞれの質問には、テキストボックスやピッカーのいずれかと尋ねられる必要がありますビュータイプ、またはセグメント化されたコントロールを使用する場合は、説明、検証アラート、および質問ラベルのラベルが必要になることもあります。それぞれの質問とラベルは、xmlで定義されている異なるフォントと色を持つ必要があります。

3ユーザーがページ内のすべての質問に回答し、送信ボタンを押します。

4-Webサービスは、応答を受け取り、指定された回答に応じて新しい質問を返します。

5-APPは新しいXMLを受け取ります(各XMLにはすべての状態、つまりすべての以前に回答した質問が含まれています)。解析して最新の未回答の質問を見つけます。

6-ユーザーは再び答え、質問を送信し、戻って、前のページでいくつかの質問を編集することもできます

7-ORユーザーに尋ねすべき問題が存在しなくなるまでの質問の次のセットを待ちます。しかし、以前のページで質問を編集した場合、そのページの後に返されるページは有効ではなくなりました。なぜなら、質問サーバーの各セットは、以前に回答された質問に依存するためです。応答を待っている最新のページであるかのように要求します。

質問;

私はtotaly customazibleであり、必要なUIコンポーネント(textboxまたはdatepicker ORピッカーとvisibiltyオプションを持ついくつかのラベルと色を含む)を作成し、質問タイプに応じてそのオブジェクトを作成し、そのオブジェクトをUIscrollviewビューまたはTableビューに追加します。では、このオブジェクトのクラスをどのように定義できますか?それはUIviewクラスのサブクラスですか?私はそのDelegeteメソッドをどこに置くべきですか?

ありがとうございます!

+0

非常にオブジェクト指向ではない単一のオブジェクトにコントローラ、モデル、およびビューをパックする方法を尋ねているので、建設的ではなく、アプリケーション全体をどのように設計するかを尋ねているため、カテゴリごとに質問を分割し、それぞれの画面を(xibまたはプログラムで)設計し、そのビューを作成し、汎用ビューコントローラから呼び出し、XMLパーサと通信をコーディングし、サポートするデータモデルをコーディングするクラスで作業する必要がありますすべてのこと。それはたくさんの作業であり、一度に1つのタスクを実行する必要があります。 – Jano

+0

@Janoは、私がnavigationcontrollerとUITableViewを使用していると仮定してくれてありがとう。私は異なる質問タイプのために異なるxibを持つべきであることを意味しますか? – Spring

+0

空き領域:P以下の答え... – Jano

答えて

1

各タイプの質問をあらかじめ設計できると思う場合は、それぞれにxibを実行してください。それらがあまりにも異なる場合は、ビューを動的に作成するBuilderクラスを作成します。いずれの場合でも、ビューのコントロールをビューコントローラにリンクするコードを使用する必要があることに注意してください。

テーブルを使用している場合、返されるビューはテーブルセルとして機能しますが、テーブル内に日付ピッカーを置く必要はありません。表は基本的にリストであり、画面コンテナではありません。ナビゲーションコントローラの方が良いと思います。同様のアプリケーションにインスピレーションを与える必要があります。

ユニットテストについてのいくつかの言葉...(あなたがすでにユニットテストを知っていれば、残りのポストはスキップできます)...

複雑なアプリケーションで重要な目標であるデカップリングを強制するため、独立したタスクを個別に処理すると、アプリケーション全体を構築しているときでも、OO設計が最も効果的です。

ほとんどのプログラマーは、小さな非UI関連コードを駆動するために単体テストを使用します。単体テストは、別のコードの結果を実行してテストする小さなコードです。これは通常、プロジェクト内の別のターゲットにGHUnitのようなフレームワークの助けを借りて実行されます。

例:質問パーサが正しく動作するかどうかをテストするためのGHUnitの架空のテストメソッドです。

// is my parser working correctly? 
- (void) testDocument { 
    File *xmlFile = [File alloc] initWithFilename:@"sampleQuestion.xml"]; 
    Question *question = [QuestionParser parse:xmlFile]; 
    GHAssertTrue(question!=nil); 
} 

コードがテストに合格した場合、それは正しい方向に確実に進んでいます。そして、この特定の課題を解決するためにアプリ全体を動かすことについて心配する必要はありませんでした。

ユニットテストのポイントが表示されない場合は、それを忘れて、準備ができたら意味をなさないでしょう。

+0

という高齢者の象牙になります!あなたもこの質問を見ることができます同じ質問より明確な説明http://stackoverflow.com/questions/6620425/iphone-can-i-use-uitableview-for-this-purpose – Spring

1

おそらくこれはUITableViewCellのサブクラスになります。質問のためのNSObjectサブクラスを作成し、それをカスタムセルにロードすることができます。

+0

単純なNSObjectサブクラスには、これらのすべての要素が含まれていて、テーブルビューのセルに挿入できますか? – Spring

+1

おそらく、NSObjectサブクラスにはUIコンポーネントは含まれません。あなたはあなたの質問のためのデータを入れるだけです。問題のサブクラスは、UITableViewCell – Dancreek

関連する問題