我的应用中有一项功能,用户可以更改应用的配色方案。该应用程序使用拆分视图控制器,带有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触摸来解决这个问题,但这也不起作用。
答案 0 :(得分:1)
您可以尝试在-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
方法...