2016-08-10 3 views
0

私はiPhoneアプリケーションを作っています。カスタムセルで3つのオブジェクトを区別する方法

このアプリケーションでは、以下のように表示する必要があります。 コレクションビューを使用することはできません。

Table View with Custom cell

私はテーブルビュー、およびカスタムセルを使用しています。私は容易に組み込むことができます。カスタムセルで3つのサブビューを取ることを意味します。そして見てください。

ここで問題はセル内でどのように各オブジェクトを区別するかです。私は各オブジェクトを呼び出すことができ、画像ビューで画像を設定することができます。

セル内の3つのオブジェクトすべてを区別するオブジェクト指向のメカニズムはありますか?

答えて

1

NSArrayとしてNSDictionaryというデータを取得して、セルに表示する3つのオブジェクトの配列を含むようにしてください。

カスタムセルのtagUImageViewに割り当てます。

cellForRowAtIndexPathには、3つのオブジェクトを取得し、switchケースを使用してイメージを適用します。

まあ、すべてはあなたがあなたのUIImageViewの配列を与えるだろうし、あなたがそれらに割り当てることができるようにあなたがImageViewのに別のタグを割り当てることができますコンセントのコレクションを使用することができ、サーバ

+0

私はサーバからのデータを配列として取得します。 –

+0

1.私は、UIViewのオブジェクトのSubcallを作成することがあります。 –

+0

そしてこのオブジェクトを操作するメカニズムはありますが、タグは1,2と3のように絵になる必要があります。 –

1

しかし、それだけであなたがしたいどのように素敵に依存これを行う。

単純な手順では、画像ビューとラベルのアウトレットをセルに公開し、テーブルビューセルのデキュー/作成時に正しい値を割り当てます。

最初のアップグレードでは、3つのセッターをセルに露出させるだけで、モデルをそれぞれに設定し、セル内のイメージとテキストを内部的に設定します。

次の作業は、3つのセッターを使用する代わりに、オブジェクトの配列を挿入することです(常にあなたのケースでは最大3個まで送信します)。

この時点では、実際にはセルのコレクションビューを使用して、セルをコレクションビューのデータソースにすることができます。しかし、これは完全にオプションです。

テーブルビューのデータソースを嫌うかもしれないので、オブジェクトの配列(あなたの場合は3まで)を含む別のモデルを作成して、元のオブジェクトの配列を配列に配布するシステムを作ることができますこれらの容器のうちの1つ。

ボタンやその他のタッチイベントを処理する必要がある場合は、コレクションビューのデリゲートまたは3つのボタンで処理することができます。どちらの場合も、セル内のボタンを処理し、レポートするセルのカスタムデリゲートを作成することをお勧めします適切なモデルのイベント。通常

  • 、データ(3のグループに)オブジェクトのあなたの配列を配布して、テーブル・ビュー・データ・ソースに割り当てるコンテナクラスを呼び出し受信(ビューコントローラ:

    一緒これは以下を生成し)

  • 配列のコンテナの数と同じです。
  • 行のセルは、セルに行インデックスを持つコンテナを割り当てます。セルをデリゲートとして割り当てます
  • セルは、コレクションビュー、区切りアウトレットまたはアウトレットコレクションのいずれかを使用して、オブジェクトの配布を内部的に処理します。
  • セルは、セルのデリゲートは再びあなたがセルあなた内部のコレクションビューを避けたい場合にも報告されたアクション

時に何をすべきかを扱うことができるアクションを処理し、バックデリゲート(- (void)myCell:(MyCell *)cell selectedItem:(MyObject *)item;

  • にそれらを報告しますxibを使用してカスタム表示を作成して、ラベル、イメージビューなどをコピーすることはできません。次に、これらのカスタムビューの3つをセル内に作成します。また、inspectabledesignableを使用すると、これらのビューはストーリーボード内に表示されます。

  • +0

    ありがとう@Matic。私はそれを見ます。 –

    1

    まずは、UICollectionViewの使用に対する制限が愚かであると言います。あなたはまだios5をターゲットにしていますか?

    私はこのように見ています。

    1. は「サブセル」のため、あなたの独自のビュークラスを作るのは、セル当たり3つのビューのいずれかの単一のインスタンスのためにこの用語を使用してみましょう。私はUIImageViewをサブクラス化し、下に名前のラベルを追加し、別の方法で描画することでユーザーインタラクションによって選択されたときにハイライトする 'setSelected:'種類のメソッドを追加します。

    2. UITableViewCellサブクラスを作成し、これらのサブセルを3つまでホストしてレイアウトします。最後のセルには1つまたは2つのサブセルが含まれていて3つではないので3までと言う。表現する人の合計が3で割り切れない場合は3ではない。

    3. 選択ロジック:あなたがオーバーライドする必要があります「するsetSelected:」あなただけのサブセルを選択解除し、選択したいので、あなたが全体のセルは、選択にそれの唯一の三分の一を強調表示する必要はありません。

      • あなたはまたtouchesEndedを実装することをお勧めします。このセルにあなたが最後に触れた3つのサブセルのどの把握できるように、そしてあなたがコントローラにこのバックを照会したり、通信できるようにする必要がありますおそらく、委任を使用しています。セルは、選択がうまくモデルにマップする必要があり、この一緒にUITableViewDelegate didSelectAtIndexPathと、その後サブセル0,1または2であったかどうか戻って通信できる場合 - selectedPerson = myArrayOfPeople[ (indexPath.row * 3) + subcellIndex ]

    あなたがであなたの細胞を飾ることができるようになりますcellForRowAtIndexPath:同様の方法で..

    +0

    ありがとうJef。私はそれを同じ方法で実装しました。選択ロジックは、まだ私の要件ではありません。しかしそれは知っていることは良いことです。 –

    関連する問題