我的应用程序中有一个功能,用户可以更改应用程序的配色方案。该应用程序使用拆分视图控制器,带有 MainTable 和 DetailView 表。除 MainTable 外,一切正常。失败的是 MainTable reloadData 方法不会导致重绘单元格。
应该注意的是,我正在更改 globalHighContrast 并从 UIModalPresentationFormSheet 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 触摸来解决这个问题,但这也不起作用。