У меня есть функция в моем приложении, где пользователь может изменить цветовую схему приложения. В приложении используется контроллер Split View с таблицей MainTable и DetailView. Все работает отлично, за исключением MainTable. Что не удается, так это то, что метод reloadData MainTable не вызывает перерисовки ячеек.UITableView reloadData не работает на MainTable в контроллере Split View
Следует отметить, что я меняю globalHighContrast и отправляю уведомление из UMLodalPresentationFormSheet viewController, поэтому таблицы видны на экране, пока активен viewController.
Я запуск обновления экрана из уведомления, например:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadAllTables)
name:@"contrastModeChanged"
object:nil];
Затем, чтобы убедиться, что я называю reloadData в главном потоке, я обработка уведомления, как это:
-(void)reloadAllTables{
[self performSelectorOnMainThread:@selector(doReloadAllTables) withObject:nil waitUntilDone:NO];
}
-(void)doReloadAllTables{
[self showIcon];
if(globalHighContrast){
theTable.backgroundColor = [Colors lightBkgColor];
self.view.backgroundColor = [Colors lightBkgColor];
} else {
theTable.backgroundColor = [Colors darkBkgColor];
self.view.backgroundColor = [Colors darkBkgColor];
}
[detailViewController configureView:currentMainMenu];
[detailViewController.subTable reloadData];
[theTable reloadData];
// desperate try to force it to work
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:currentMainMenu inSection:0];
[self tableView:theTable didSelectRowAtIndexPath:indexPath];
}
Оба reloadAllTables и doReloadAllTables в настоящее время называется, но
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
не б названный.
Как только я нажимаю ячейку на MainTable, она корректно обновляет новую цветовую схему.
Кроме того, существует отчаянная попытка обхода этого путем попытки имитации касания MainTable, но это тоже не сработает.
Да спасибо, что делает работу. –