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
Ответы
Ответ 1
Вы внедрили сделал De selectRowAtIndexPath. Он будет запущен, когда строка больше не будет выбрана.
Когда вы касаетесь второй строки, первая строка больше не будет выбрана, поэтому [0, 1] будет отображаться.
Когда вы снова коснетесь первой строки, вторая строка больше не будет выбрана, поэтому [0, 0] будет отображаться.
Это полностью ожидаемо.
Реализовать сделал Выберите RowAtIndexPath, если вам нужно, чтобы он ответил, когда выбрана строка.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// ^
...
NSLog(@"IndexPath: %@", [indexPath description]);
}
Ответ 2
Несмотря на заголовок, перегруженный метод на самом деле didDeselectRowAtIndexPath
, поэтому кажется, что поведение правильное - при касании 1-й строки 0-й отменяется, и наоборот.