0

UITableViewうまく機能するストーリーボードから構築された静的があります。ただし、ユーザー定義ファイルからプログラムで最初のカテゴリを埋めたい

簡単に言えば、配列内のすべての文字列を調べて、それらを最初のカテゴリの行のセルとして追加したいと考えています。2 番目のカテゴリには、一連のやや複雑なセル (多数のラベル、テキストフィールド、ボタン、およびその他のコントロールを含む) があり、ストーリーボードで定義されていますが、コードで再作成する気はありません。

私が理解している限りUITableView、ストーリーボードからビルドされた場合のデフォルトの動作は、nibファイルを暗黙的な として使用することですdatasource。カスタム クラスを として使用するdatasourceと、2 番目のセクションが機能しません。これを修正する2つの可能な方法を考えました:

  • から最初のカテゴリを入力しdatasource、残りをnibファイルに委任します。これは可能ですか?nibプログラムで に入力するように依頼する方法はありUITableViewますか?
  • ストーリーボードで作成したセルをコードにエクスポートし、このコードを my に貼り付けますdatasource。この方法には、2 番目のカテゴリを変更するのが難しくなるという欠点があります。

これらの 2 つのオプションのいずれかが実行可能ですか? 別のオプションはありますか?

4

2 に答える 2

1

動的なプロトタイプセルを使用します。ViewController次に、をととして設定しdelegateますdataSource。次に、のカスタムサブクラスを作成しUITableViewCell、2番目のセクションの要素をIBOutletカスタムのsに接続しますUITableViewCell

最初のセクションが一般的なセルタイプの1つで実行できるものでない場合は、UITableViewCellそのセクションのカスタムサブクラスも作成します。

次に、このメソッドを使用しcellForRowAtIndexPath:て、必要な情報をセルに設定します。したがって、最初のセクションを使用FirstSectionCellし、2番目のセクションSecondSectionCellをカスタムサブクラスとして使用すると、次のようUITableViewCellcellForRowAtIndexPath:なります。

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if(indexPath.section==0)
    {
        FirstSectionCell *firstCell = [tableView dequeueReusableCellWithIdentifier:@"First Cell Prototype"];

        //Set up the first cell.

        return firstCell;
    } 
    else if(indexPath.section ==1)
    {
        SecondSectionCell *secondCell = [tableView dequeueReusableCellWithIdentifier:@"Second Cell Ptototype"];

        //Set up second cell.
        secondCell.someLabel.text = @"whatever";
        //etc.

        return secondCell;
    }
    else 
    {
        //if you have another section handle it here.
    }
}
于 2012-07-20T13:30:18.870 に答える
1

ストーリーボードを使用する場合、次の 2 種類のテーブル ビューがあります。

  • 静的
  • 動的

現在、前者を使用しています。ストーリーボードですべてを定義し、コードはほとんどありません。

ただし、後者に変更する必要があります。

UITableViewCellストーリーボードにを引き続き保持できます。コードでそれを行う必要はありません (ただし、作業が簡単になる場合は可能です)。「再利用識別子」を使用して、テンプレート セルを参照できます。

そうでなければ、あなたはほとんどそれを手に入れました。データ ソースと (場合によっては) テーブル ビュー デリゲートのその他のメソッドを実装するコードを記述する必要があります。

静的から動的に切り替えるのは面倒です。Xcodeを使えばもっと簡単にできると確信しているので、私はレーダーを上げることを意味し続けています...

于 2012-07-20T13:26:17.737 に答える