2011-01-28 2 views
8

У меня возникла проблема при реализации UITableView в приложении iOS, над которым я работаю (iOS SDK 4.2). Если я коснусь ячейки в представлении таблицы, а затем прокрутите представление так, чтобы ячейка покинула экран, когда она вернется к просмотру, последняя выбранная ячейка была повторно выбрана.UITableViewCell переустанавливается при прокрутке назад на экране

Чтобы проверить это, я создал новый проект View Based Application, влачил UITableView в Interface Builder и установите контроллер представления в качестве источника данных вида таблицы и делегата, а затем вставьте следующий код в контроллере представления:

- (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger) section { 
    return 12; 
} 

- (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { 
    static NSString *cellID = @"aCellID"; 

    UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

    if (!aCell) { 
     aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease]; 
    } 

    aCell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row +1]; 

    return aCell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *aCell = [tableView cellForRowAtIndexPath:indexPath]; 
    [aCell setSelected:NO animated:YES]; 
} 

При запуске (в симуляторе или на устройстве), если я должен был нажать любую ячейку (например, ячейку 12), она будет выбрана и отменена. После этого, если в текущей выбранной таблице нет ячеек, если я прокручиваю представление так, чтобы последняя выбранная ячейка (12 в этом случае) покинула экран, она снова будет выбрана, когда она снова появится.

Является ли это предполагаемым поведением по умолчанию для UITableView? Или, возможно, ошибка в моей реализации? Что было бы лучшим способом отменить выбор этой ячейки в этой ситуации?

ответ

13

Потребовалось мне с просьбой, чтобы понять это сам:

Моя проблема была с помощью метода UITableViewCellsetSelected: вместо того, чтобы использовать метод UITableViewdeselectRowAtIndexPath:.

+0

спасибо! Я была такая же проблема. – Marky

+0

Вы все еще можете воспроизвести анимацию, где она выбирает ее на короткое время, а затем снимает ее сразу после? – chourobin

+0

@ cr54 Да, вы все еще можете получить этот эффект анимации, как это: - (Недействительными) Tableview: (UITableView *) Tableview didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [Tableview deselectRowAtIndexPath: indexPath анимированный: YES]; } –

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