У меня есть элемент управления 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;
}