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-й становится не выбранным, и наоборот.