我有一个表视图控制器,其中所有美国州都按字母顺序列出。单击状态将通过Web服务调用返回有关状态的详细信息。这是我第一次尝试分段或分组表视图,而我在过去'A'的行上遇到索引路径时遇到问题。
例如,如果我点击'C'组中第一项'California',则indexpath.row属性为0而不是4,因为CA是按字母顺序排列的第五个状态,所以indexpath.row为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;
}
在我的seque中,在此方法的最后一行设置断点显示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]];
}
}
如何使用分组表视图,其中项目仍然按原始数组中的编号进行编号?谢谢! V
答案 0 :(得分:1)
您在NSIndexPath
的上下文中对UITableView
的理解不正确。对于表中的每个单独的部分,row
属性重置为0.
您有两个简单的选择:
你可以做的是制作一个二维数组("数组数组"),其中第一个级别用于每个部分,第二个级别用于每个部分。这使您可以直接使用索引路径的row
和section
来进行数组查找。
在prepareForSegue:sender:
中,您可以遍历各个部分并计算行数,直至到达indexPathForSelectedRow.section
,然后将indexPathForSelectedRow.row
添加到该计数中。这将为您提供一个索引,您可以使用该索引从一维数组中获取状态信息。