静态表视图

时间:2012-06-14 21:48:05

标签: iphone objective-c nsdictionary uitableview

我正在创建一个静态表视图(必须与iOS 4兼容 - 所以我不能使用iOS 5的方法)。

我的方式是我有两个部分;第一个有一个单元格,第二个有两个单元格。我制作了两个数组,一个是第一部分中唯一一个单元格的标题,另一个是第二部分中两个单元格的两个标题。所以我的字典看起来像这样:

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

我遇到的问题是我需要使用tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section返回一个部分中的行数。所以我的问题是,如何使用NSInteger section从字典中检索部分?我也必须在tableView:cellForRowAtIndexPath中做同样的事情。

谢谢

3 个答案:

答案 0 :(得分:1)

如果您不了解字典的工作原理,我建议您简化问题。为每个部分创建一个数组,然后在委托方法中使用switch()语句为行计数等调用[数组计数]。对于部分计数,您仍然可以使用[[dictionary allKeys] count]的原始字典。

编辑: 我刚看到@fzwo在两条评论中推荐了相同的内容

答案 1 :(得分:1)

最好的选择是阵列阵列,如前所述。为避免词典的复杂性,请为表格数据和章节标题创建两个NSArray ivars。

// 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];

如果您的单元格需要更多数据,则可以使用其他对象而不是行标题。

答案 2 :(得分:-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;
}