1

我有一个表格视图控制器,其中按字母顺序列出了所有美国州。单击某个状态会通过 Web 服务调用返回有关该状态的详细信息。这是我对分段或分组表视图的第一次尝试,我在使用超过“A”的行上的索引路径时遇到了问题。

例如,如果我单击“C”组中的第一项“California”,则 indexpath.row 属性为 0 而不是 4,因为 CA 是按字母顺序排列的第五个状态,它应该有一个 indexpath .row of 4。

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

    //get the letter in the current section
    NSString *letter = [stateIndex objectAtIndex:[indexPath section]];
    //get all the states beginning with the letter
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", letter];
    NSArray *states = [stateKeys filteredArrayUsingPredicate:predicate];
    if([states count] > 0){
        //get relevant state from states object
        NSString *cellValue = [states objectAtIndex:indexPath.row];
        [[cell textLabel] setText:cellValue];        
    }    
    return cell;
}

在我的后续中,在此方法的最后一行设置断点表明 itemRowIndex 不正确(当然,对于“A”组除外):

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"sgShowStateRivers"]){
        RiversByStateTableViewController *riversVC = [segue destinationViewController];
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSInteger itemRowIndex = indexPath.row;
        NSString *key = [stateKeys objectAtIndex:itemRowIndex];
        [riversVC setStateIdentifier:[statesDict objectForKey:key]];
    }
}

怎么会有一个分组表视图,其中项目仍按原始数组中的编号进行编号?谢谢!五

4

1 回答 1

1

NSIndexPath在 a 的上下文中对 s 的理解UITableView是不正确的。对于表中的每个单独部分,该row属性都重置为 0。

您有两个简单的选择可以继续前进:

  • 您可以做的是制作一个二维数组(“数组数组”),其中第一级用于每个部分,第二级用于部分中的每一行。这使您可以直接使用索引路径的rowsection来进行数组查找。

  • prepareForSegue:sender:您可以循环遍历这些部分并计算行数,直到您到达indexPathForSelectedRow.section然后添加indexPathForSelectedRow.row到该计数。这将为您提供一个索引,您可以使用它从一维数组中获取状态信息。

于 2013-08-24T03:04:35.330 回答