TableView возвращает ноль (0) при выборе строки - PullRequest
0 голосов
/ 17 января 2011

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

Ответы [ 2 ]

1 голос
/ 17 января 2011

Вы также должны учитывать indexPath.section.

Вы должны создать двумерный массив _conditions, индексированный по разделам, а затем по строкам.

0 голосов
/ 18 января 2011

Получил работу, следуя ответу на этот пост: UITableView Проблема с разделами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...