0

我有一个包含 5 个对象的 NSArray。

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

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

我想做的是展示

  • 第 1 节中的 test1
  • 第 2 节中的 test2 和 test3
  • 第 3 节中的 test4
  • 第 4 节中的 test5

这是我每个人都有 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];


}

在此处输入图像描述

4

2 回答 2

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];
于 2013-01-22T18:05:21.220 回答
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;
}
于 2013-01-22T18:05:24.653 回答