2013-09-06 3 views
0

Я работаю над приложением для чтения iOS RSS. Мое приложение реализует UITableView с пользовательскими заголовками секций:UITableView ReloadData не использует выделенные ячейки

UINib *sectionHeaderNib = [UINib nibWithNibName:@"HeadlineView" bundle:nil]; 
[self.newsTable registerNib:sectionHeaderNib forHeaderFooterViewReuseIdentifier:SectionHeaderViewIdentifier]; 

Каждый заголовок раздела, используемый для отображения заголовок статьи. У меня есть возможность изменить между «уже увиденными» статьями и новыми статьями. Каждый раз, когда я переключаюсь между опциями, массив просмотров таблицы данных изменяется таким образом, мне нужно позвонить UITableView ReloadData:

[self.newsTable performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 

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

Каждый раз, когда я инициализирую заголовок раздела, я настраиваю 3 распознавателя жестов, и это то, что занимает много времени. но если заголовок секции отменяется, распознаватели жестов уже установлены так, что они бывают быстрыми.

это код Dequeue:

NowsHeadlineHeaderView *sectionHeaderView = [self.newsTable dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderViewIdentifier]; 

Я не выполнять любые другие трудоёмкую задачу в загрузке ячейки/раздела.

Почему TableView инициализации заголовка раздела снова и снова, когда я использую reloadData и как я могу это исправить, так что будет быстрее

ответ

0

сломанный вызов reloadData вытирает шифер чистый на удаленных из очереди клеток/заголовков/и т.д.. От the documentation:

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

Если то, что вы делаете, добавляя или вычитая клетки или секции, попробуйте использовать insertRowsAtIndexPaths:withRowAnimation: и deleteRowsAtIndexPaths:withRowAnimation: вместо этого.

Я также подозреваю, что ваша установка NowsHeadlineHeaderView делает что-то неэффективное, вы можете захотеть изучить это.

+0

так что если моя таблица состоит из 50 разделов, и теперь я хочу изменить представление таблицы, чтобы состоять всего из 5 разделов с совершенно разными данными, мне нужно удалить 50 разделов и добавить 5 разделов? Я думаю, что этот метод займет еще больше времени. –

+0

@ItaiCaspi Ну, да, есть крайности для всего. Но я буду повторять, что я подозреваю, что вы делаете некоторые неэффективные в своем «NowsHeadlineHeaderView», например, возможно, синхронную загрузку сетевых данных? – kamprath

+0

Класс NowsHeadlineHeaderView очень прост, он имеет только 3 UILabels, которые я обновляю из массива. он также имеет 3 распознавателя жестов, которые настроены в блоке init. это оно. поэтому я совершенно уверен, что это не вызывает проблемы –

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