0

静的なテーブル ビューを作成しています (iOS 4 と互換性がある必要があるため、iOS 5 の方法は使用できません)。

私のやり方では、2 つのセクションがあります。1 つ目は 1 つのセルを持ち、2 つ目は 2 つのセルを持ちます。2 つの配列を作成しました。1 つは最初のセクションの唯一のセルのタイトルで、もう 1 つは 2 番目のセクションの両方のセルの両方のタイトルです。したがって、私の辞書は次のようになります。

(NSDictionary *)  {
    First =     (
        Title1       < --- Array (1 item)
    );
    Second =     (
        "Title1",    < --- Array (2 items)
        Title2   
    );
}

私が抱えている問題は、を使用してセクション内の行数を返す必要があることですtableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section。だから私の質問は、どのように辞書からセクションを取得するのNSInteger sectionですか? で同じことをしなければならないでしょうtableView:cellForRowAtIndexPath

ありがとうございました

4

3 に答える 3

1

前述のように、最善の策は配列の配列です。辞書の複雑さを避けるためNSArrayに、テーブル データとセクション タイトル用に 2 つの ivar を作成します。

// in viewDidLoad

tableData = [NSArray arrayWithObjects:
   [NSArray arrayWithObjects:
      @"Row one title", 
      @"Row two title", 
      nil],
   [NSArray arrayWithObjects:
      @"Row one title", 
      @"Row two title", 
      @"Row three title", 
      nil],
   nil]; 
sectionTitles = [NSArray arrayWithObjects:
   @"Section one title",
   @"Section two title", 
   nil]; 

// in numberOfSections: 
return tableData.count;

// in numberOfRowsInSection:
return [[tableData objectAtIndex:section] count];

// in titleForHeaderInSection:
return [sectionTitles objectAtIndex:section];

// in cellForRowAtIndexPath:
...
cell.textLabel.text = [[tableData objectAtIndex:indexPath.section]
                       objectAtIndex:indexPath.row];

セルで使用できるデータがさらに必要な場合は、行タイトルの代わりに他のオブジェクトを使用できます。

于 2012-06-15T08:23:53.483 に答える
1

辞書の仕組みを理解していない場合は、問題を単純化することをお勧めします。セクションごとに 1 つの配列を作成し、デリゲート メソッド内で switch() ステートメントを使用して、行数などの [array count] を呼び出します。セクション数については、[[dictionary allKeys] count] で元の辞書を引き続き使用できます。

編集: @fzwo が 2 つのコメントで同じことを推奨しているのを見たところです。

于 2012-06-15T07:44:21.777 に答える
-3

セクション内の行数を取得するには、次を使用できます。

tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSString *key = [[dictionary allKeys] objectAtIndex: section];
    return [[dictionary objectForKey:key] count];
}

セルの値を取得するには:

tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *key = [[dictionary allKeys] objectAtIndex: indexPath.section];
    NSArray *values = [dictionary objectForKey:key];
    NSString *value = [values objectAtIndex: indexPath.row];

    // code to create a cell

    return cell;
}
于 2012-06-14T21:52:39.930 に答える