68

Я столкнулся с действительно загадочной ошибкой. первая строка моего UITableView возвращает и второй один возвращает в indexPath! Как это вообще возможно?didSelectRowAtIndexPath возвращает неверный 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

ответ

224

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

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

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

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

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

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

Хех - Я пропустил это, когда сам прочитал вопрос. :-) Это похоже на отсутствие слова «the», когда оно используется дважды. ;-) –

+3

Я просто сделал это тоже. Как расстраивает. Intellisense отличная 99,9% времени, но это еще 1,1% ... вау. – swilliams

+4

Я просто потратил несколько часов, пытаясь понять, что iOS звонит мне с той строкой, которую я выбрал ранее. Я все пробовал. Удивительно, какая разница из нескольких букв. Тайна решена. – 2013-03-17 23:50:55

3

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

+0

Я пошел от одной и той же проблемы :) –

Смежные вопросы