1

我的应用程序中有一个功能,用户可以更改应用程序的配色方案。该应用程序使用拆分视图控制器,带有 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 触摸来解决这个问题,但这也不起作用。

4

1 回答 1

1

您可以尝试将用于更新方案的代码放入-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath方法中...

于 2013-10-17T13:31:27.023 回答