2011-01-07 5 views
4

Мне было интересно, может ли кто-нибудь ответить мне, если очередь UITableView покраснеть, когда вызывается UITableView reloadData. Я пытаюсь это сделать, и это не помогает мне. Все предложения?Очистка очереди UITableView для ячеек

+0

Что делать вы вызываете «очередь очереди UITableView»? – VdesmedT

ответ

4

Как только таблица загружена, ячейки повторно используются. Перезагрузка таблицы не сбрасывает очередь. reloadData звонки - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

В этом методе присутствует условие if(cell==nil), так что ячейки не сбрасываются после их загрузки в память и, следовательно, повторно используются.

Чтобы обойти это, вы сбрасываете свои ячейки перед тем, как приложить правильную информацию.

cell.detailTextLabel.text = @""; 
cell.accessoryType = UITableViewCellAccessoryNone; 

Или, если вы используете accessoryView

cell.accessoryView = nil; 

Также обратите внимание на этот пример. UITableView not updating correctly when scrolling.

8

Если вы посмотрите на файл заголовка для UITableView, вы увидите, что есть частный NSMutableDictionary (iVar), называемый «_reusableTableCells». Это словарь с идентификаторами повторного использования ячеек в качестве ключа и с массивом с ячейками, которые в настоящее время находятся вне экрана в качестве значения.

Если вы хотите вручную очистить ячейки в очереди таким образом, что может измениться с реализацией, вы можете сделать это в уродливой форме, например, так:

NSMutableDictionary *cells = (NSMutableDictionary*)[self.tableView valueForKey:@"_reusableTableCells"]; 
[cells removeAllObjects]; 

Надеется, что это помогает ...

+0

Ohhhh ohhh ohh it's magic – fnc12

+0

Является ли это кошерным для App Store? – bcattle

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