Динамическое обновление заголовков раздела UITableView - PullRequest
0 голосов
/ 09 января 2011

Я хотел бы загружать и обновлять пользовательские заголовки разделов асинхронно, но я просто не могу найти способ сделать это. В настоящее время я делаю пользовательские UIView s следующим способом:

Tableview: viewForHeaderInSection:

Я мог бы загружать данные синхронно оттуда, но это временно заблокировало бы пользовательский интерфейс, что совсем не удобно для пользователя.


Подробнее :

Мое табличное представление основано на Базовых данных, и загруженные данные могут быть сохранены в двоичном свойстве моего объекта изображения. Поэтому я проверил, могут ли быть обнаружены изменения, и есть метод NSFetchedResultsControllerDelegate, который почти делает то, что я хочу:

контроллер: didChangeSection: atIndex: forChangeType:

Но, к сожалению, он не поддерживает обновления заголовков разделов (только удаление / вставка) ...

Есть идеи? Большое спасибо за вашу помощь.

Ответы [ 4 ]

11 голосов
/ 10 января 2011

Не могли бы вы просто позвонить:

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

после того, как вы получили новые данные и обновили базу данных CoreData.

5 голосов
/ 11 декабря 2012

Также опция, если вы используете FetchedResultsControllers:

в подпрограмме:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
   atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
  newIndexPath:(NSIndexPath *)newIndexPath {

добавить эту строку где-нибудь (при условии, что вы объявили переменную в заголовке ...):

    sectionToUpdate = newIndexPath.section;

Затем в:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 

в конце добавьте что-то вроде этого:

if (sectionToUpdate != -1) {
    [yourtableview         beginUpdates];
    [yourtableview         reloadSections:[NSIndexSet indexSetWithIndex:sectionToUpdate] withRowAnimation:UITableViewRowAnimationFade];
    [yourtableview         endUpdates];
    sectionToUpdate = -1;
}

Должно избавить вас от полной перезагрузки таблицы.

1 голос
/ 21 января 2011

UITableView reloadSections: withRowAnimation: (или даже reloadData) будет работать, но если это не подходит для вас по другим причинам (как не для меня, я не хотел, чтобы текущее текстовое поле оставляло первый респондент в отставке)), вы можете сохранить ссылки на все headerViews, а затем обновлять их непосредственно при необходимости.

0 голосов
/ 09 января 2011

Если вы поддерживаете / получаете указатель на заголовок (и) раздела и обновляете его, что произойдет?

Кроме того, что происходит, когда вы используете методы, которые вы упомянули. Например: в controller:didChangeSection:atIndex:forChangeType: вызовите ваш tableView:viewForHeaderInSection: (используя представление таблицы и раздел из контроллера: didChangeSection :) и измените представление при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...