我有一个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:
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,因此它永远不会从此方法返回。而且......它有所帮助!我不知道为什么并且真的想知道答案?
答案 0 :(得分:0)
显示你的cellForRowAtIndexPath方法实现,我确定你应该在哪里寻找错误。