插入/删除单元格后,单元格未在UITableView中呈现

时间:2013-01-03 04:57:43

标签: objective-c ios uitableview

我有一个tableview,它可以在两种模式下工作:只读和读写。在只读模式下,表只包含4个单元,处于读写模式 - 8个单元。要在这两种模式之间转换,我有按钮并执行了操作:

...
NSArray* cellIndexesInCurrentMode = [self cellIndexesInMode:Mode1];
NSArray* cellIndexInNewMode = [self cellIndexesInMode:Mode2];

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths: cellIndexInNewMode withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteRowsAtIndexPaths:cellIndexesInCurrentMode withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

一切正常,直到我以读写(8个单元格)向下滚动表格,所以它反弹了。之后,点击按钮以转换到mode2会导致其中一个单元格未被渲染的情况:

                 before transition:  

before transition:

                 after transition:

after transition:

我的调查显示,由于某种原因,在UITableView上调用最后一个layoutSubviews后,此单元格的alpha = 0。

我被困住了,我不知道发生了什么,所以任何帮助都会非常感激。

更新 这是我的cellForRowAtIndexPath方法: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)cellForRowAtIndexPath {     IDataSourceElement item = [[self collection] getDataSourceElementAtIndex:cellForRowAtIndexPath.row];

MyTableCell* cell = nil;

if ([item conformsToProtocol:@protocol(MyTableCellBuilder)]) {
    cell = [(MyTableCellBuilder)item tableView:tableView buildCellForIndexPath:cellForRowAtIndexPath];
} 

if (cell == nil) {
    Class cellClass = [self getCellClassForElement: item];

    NSString* reuseId = [cellClass description];

    cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
    if (!cell) {
        cell = [[[cellClass alloc] initWithReuseIdentifier :reuseId] autorelease];
    }
}


[self fillCell:cell forTableView:tableView forIndexPath:cellForRowAtIndexPath];

return cell;

}

MyTableCellBuilder buildCellForIndexPath:方法实现

- (MyTableCell*) tableView :(UITableView*)tableView buildCellForIndexPath:(NSIndexPath*)buildCellForIndexPath {
    MyTableCell* cell = myTableCell;
    if ([cell isKindOfClass:[TextPropertyCell class]] == NO) {
        cell = (MyTableCell*)[tableView dequeueReusableCellWithIdentifier :[self cellReuseIdentifier]];
        if ([cell isKindOfClass:[MyTableCell class]] == NO) {
            cell = [[[MyTableCell alloc] initWithReuseIdentifier :[self cellReuseIdentifier]] autorelease];
        }
        [self prepareCell:cell];
    }

        //cell setup
        ...
    ...
    return cell;
}

我的想法是缓存UITableViewCell实例的问题,我知道这不是最好的方法,但无论如何我都拥有它。我试图删除缓存,所以我所做的只是将myTableCell设置为nil,因此它永远不会从此方法返回。而且......它有所帮助!我不知道为什么并且真的想知道答案?

1 个答案:

答案 0 :(得分:0)

显示你的cellForRowAtIndexPath方法实现,我确定你应该在哪里寻找错误。