多部分UITableView和NSArray

时间:2013-01-22 17:51:49

标签: iphone ios

我有一个带有5个物体的NSArray。

NSArray *tmpArry2 = [[NSArray alloc] initWithObjects:@"test1", @"test2", @"test3", @"test4", @"test5",nil];

我有一个包含4个部分的表格(见截图)

我想做的是显示

  • 第1节中的test1
  • 第二部分中的test2和test3
  • 第3节中的test4
  • test5 in 4th section

这是我有index.row和index.section的问题,每个都来自

indexPath.row: 0 ... indexPath.section: 0
indexPath.row: 0 ... indexPath.section: 1
indexPath.row: 1 ... indexPath.section: 1
indexPath.row: 0 ... indexPath.section: 2
indexPath.row: 0 ... indexPath.section: 3

我希望使用indexPath.section来获取tmpArry2中的值,但我不确定如何做到这一点。我想过创建一个全局静态int counter = 0;并继续在cellForRowAtIndexPath中递增它但问题是如果我向上和向下滚动值继续在单元格之间跳转。

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

    //NSLog(@"Inside cellForRowAtIndexPath");

    static NSString *CellIdentifier = @"Cell";

    // Try to retrieve from the table view a now-unused cell with the given identifier.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // If no cell is available, create a new one using the given identifier.
    if (cell == nil)
    {
        // Use the default cell style.
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    NSLog(@"indexPath.row: %d ... indexPath.section: %d ...", indexPath.row, indexPath.section);

//this will not give me right results
//NSString *titleStr2 = [tmpArry2 objectAtIndex:indexPath.section];


}

enter image description here

2 个答案:

答案 0 :(得分:4)

以下代码应该有所帮助,但我不明白你为什么在tmpArry2和cellForRowAtIndexPath方法中有标题countDownArray?我假设您在代码中的某处重命名它。

如果您将以下代码放在cellForRowAtIndexPath方法中,它应该可以正常工作。

NSInteger index = 0;
for (int i = 0; i < indexPath.section; i++) {
    index += [self tableView:self.tableView numberOfRowsInSection:i];
}
index += indexPath.row;
cell.textLabel.text = [countDownArray objectAtIndex:index];

答案 1 :(得分:0)

我认为您需要将tmpArry2的结构更改为具有子数组 - 这是执行部分的常用方法。所以数组应该是这样的(使用数组的新表示法):

NSArray *tmpArry2 = @[@[@"test1"], @[@"test2", @"test3"], @[@"test4"], @[@"test5"]];

这为您提供了一个包含4个对象的数组,每个对象都是一个数组。然后在您的数据源方法中,您将执行此操作:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return tmpArry2.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [tmpArry2[section] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    cell.textLabel.text = tmpArry2[indexPath.section][indexPath.row];
    return cell;
}