UITableView reloadData无法在Split View Controller中的MainTable上运行

时间:2013-10-04 12:41:31

标签: uitableview ios7 uisplitviewcontroller

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

1 个答案:

答案 0 :(得分:1)

您可以尝试在-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath方法...

中添加用于更新方案的代码