didSelectRowAtIndexPath возвращает неправильный IndexPath

Я столкнулся с действительно загадочной ошибкой. Первая строка моего 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 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам