2013-10-04 2 views
1

У меня есть функция в моем приложении, где пользователь может изменить цветовую схему приложения. В приложении используется контроллер 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, но это тоже не сработает.

ответ

1

Вы можете попробовать поставить код для обновления вам схему в -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath методом ...

+0

Да спасибо, что делает работу. –

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