Подтвердить что ты не робот

DidSelectRowAtIndexPath возвращает неверный IndexPath

Я столкнулся с действительно загадочной ошибкой. Строка первая моего UITableView возвращает 1, а second возвращает 0 в indexPath! Как это возможно?

В моем `- (void) viewDidLoad` все по-прежнему прекрасно. Я выделяю первую строку успешно с помощью

currentRow = 0;
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:currentRow inSection:0] 
  animated:NO scrollPosition:UITableViewScrollPositionNone];

У меня есть переменная currentRow для отслеживания выбранной строки (другой элемент управления изменяется в зависимости от выбранного в данный момент).

Теперь в моей функции делегата `didDeselectRowAtIndexPath` у меня есть:

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
...
NSLog(@"IndexPath: %@", [indexPath description]);
}

В журнале отображается следующее:

IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 0], когда я касаюсь строки second и IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1], когда я касаюсь строки first.

Нет вставки или удаления строк или сортировки и т.д., даже не прокрутки. Это простой UITableView, сгруппированный стиль, с 1 секцией и 3 строками. Что может быть причиной этого?

Спасибо за вашу помощь,
S

4b9b3361

Ответ 1

Вы внедрили сделал De selectRowAtIndexPath. Он будет запущен, когда строка больше не будет выбрана.

Когда вы касаетесь второй строки, первая строка больше не будет выбрана, поэтому [0, 1] будет отображаться.
Когда вы снова коснетесь первой строки, вторая строка больше не будет выбрана, поэтому [0, 0] будет отображаться.

Это полностью ожидаемо.

Реализовать сделал Выберите RowAtIndexPath, если вам нужно, чтобы он ответил, когда выбрана строка.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //                                       ^
    ...

    NSLog(@"IndexPath: %@", [indexPath description]);
}

Ответ 2

Несмотря на заголовок, перегруженный метод на самом деле didDeselectRowAtIndexPath, поэтому кажется, что поведение правильное - при касании 1-й строки 0-й отменяется, и наоборот.