Как перезагрузить UITableView, пока я смотрю на него

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


person Genericrich    schedule 19.03.2009    source источник


Ответы (4)


Вызов reloadData обновляет данные сразу после вызова метода. Он не ждет, пока таблица будет прокручена. Прежде чем вызывать reloadData, убедитесь, что источник данных (массив, словарь или другое место, где вы сохранили значения) изменен.

person lostInTransit    schedule 19.03.2009
comment
Кажется, не работает с пользовательской ячейкой представления таблицы. Данные не изменяются до тех пор, пока табличное представление не будет прокручено. Возможно, у меня есть ошибка в моем пользовательском методе ячейки представления таблицы. - person Genericrich; 19.03.2009
comment
Я тоже использую пользовательскую ячейку. Отлично работает для меня. Вы наверное что-то пропустили в коде. Можете ли вы опубликовать код. может быть, мы сможем найти что-то - person lostInTransit; 19.03.2009
comment
Если вы используете nib-файл для разработки своего представления, не забудьте подключить таблицу, для которой вы вызываете reloadData в коде, к таблице в вашем nib. Это происходит легко, так как вам также нужно подключить делегата и источник данных. - person jake_hetfield; 18.04.2012
comment
У меня была такая же проблема с пользовательскими ячейками представления таблицы. Мне пришлось вызвать метод loadView из ViewWillAppear, чтобы ячейки обновлялись без прокрутки при последующих загрузках. - person IcyBlueRose; 23.06.2013
comment
Н.Б. Если вы находитесь в UITableViewController, это self.tableView.reloadData() - person dumbledad; 13.09.2016

Вы обновляете данные из основного потока? Если это так, вам нужно вызвать метод reloadData, используя следующий метод:

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

Итак, для tableView это будет:

[tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

person xmr    schedule 06.08.2010

Просто обновление 2013 года, вы также должны иметь возможность перезагружать данные, пока вы используете

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});

GCD — это круто!

person GangstaGraham    schedule 20.05.2013
comment
Это должен быть принятый ответ. Если вы надеялись, что простая перезагрузка данных фактически обновит пользовательский интерфейс без какого-либо взаимодействия, это способ сделать это. - person Markus; 26.04.2015
comment
Можете ли вы объяснить, почему это должно выполняться в основном потоке? - person jchnxu; 14.05.2015

Следующий код поможет вам перезагрузить таблицу, пока вы смотрите:

[self.tableView reloadData];
person Prithivi    schedule 19.03.2014
comment
Плохая практика вызова этих методов - person AlexeyVMP; 11.07.2014