我有一个TableView控件,我已对其进行了分区/分组。但是,这已经破坏了确定我在表中选择的项目的代码。
- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
/*
When a row is selected, set the detail view controller's detail item to the item associated with the selected row.
*/
//detailViewController.detailItem = [NSString stringWithFormat:@"Row %d", indexPath.row];
if (_delegate != nil) {
Condition *condition = (Condition *) [_conditions objectAtIndex:indexPath.row];
[_delegate conditionSelectionChanged:condition];
}
}
我的样本数据目前有6个部分,第一部分包含两个项目,其余部分包含一个。如果我在第一部分中选择第二项,则详细信息视图会更新,任何其他选择始终显示第一部分中的第一项(项目0)。
我假设这是因为indexPath.row为其他部分返回0,因为它是该部分中的第一个项目,然后导致我的数组中的第一个对象被选中。
如何修复代码以确保选择正确的项目?除此之外,其他一切都很好。
的cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellIdentifier";
// Dequeue or create a cell of the appropriate type.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;
}
//get the letter in the current section
NSString *alphabet = [conditionIndex objectAtIndex:[indexPath section]];
//get all conditions beginning with the letter
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name beginswith[c] %@", alphabet];
NSArray *conditionsGrouped = [_conditions filteredArrayUsingPredicate:predicate];
if ([conditionsGrouped count] > 0) {
Condition *condition = [conditionsGrouped objectAtIndex:indexPath.row];
cell.textLabel.text = condition.name;
}
return cell;
}
答案 0 :(得分:1)
你也应该考虑indexPath.section。
您应该创建一个二维_conditions数组,按部分索引,然后按行索引。
答案 1 :(得分:0)
按照这篇文章的回答了解它: UITableView Problem with Sections