didSelectRowAtIndexPath возвращает неправильный IndexPath - PullRequest
70 голосов
/ 07 ноября 2010

Я столкнулся с действительно загадочной ошибкой. первая строка моего UITableView возвращает 1 , а вторая возвращает 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] при касании второй строки и IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1] когда я касаюсь первой строки.

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

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

Ответы [ 2 ]

229 голосов
/ 07 ноября 2010

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

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

Это вполне ожидаемо.

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

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

    NSLog(@"IndexPath: %@", [indexPath description]);
}
3 голосов
/ 07 ноября 2010

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

...