我的应用程序中的 UITableViewController 从 json 数据源中提取数据。我还使用 CG 创建了自定义 UITableViewCell 背景。发生了一个非常有趣的错误,我不知道为什么。我将引导您了解发生了什么以及如何重新创建它:
点击进入表格视图。根本不滚动表格,我立即点击视图中的项目。点击该项目后,我按下后退按钮返回表格视图。如果我向下滚动第一个从屏幕外出现的单元格,则不会有我的自定义背景。它只是单元格的默认设置。然后,如果我继续向下滚动每 10 个单元格,也会遇到同样的问题。
这个错误只发生在这个确切的过程中。如果我在点击一个项目之前滚动表格视图,它就不会发生。
下面是 tableview 控制器的相关代码:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Will remove all of the used codes from the table if setting is enabled
if (self.shouldHideCodes) {
NSMutableArray *tempArray = [self.jsonCodeData mutableCopy];
[tempArray removeObjectsInArray:[self.usedCodes usedCodes]];
self.jsonCodeData = tempArray;
}
return [self.jsonCodeData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
if (self.jsonCodeData) {
cell = [tableView dequeueReusableCellWithIdentifier:@"code cell"];
if ([cell isKindOfClass:[CodeCellTVC class]]) {
CodeCellTVC *tvcCell = (CodeCellTVC *)cell;
if (![tvcCell.backgroundView isKindOfClass:[CustomCellBackground class]]) {
tvcCell.backgroundView = [[CustomCellBackground alloc] init];
}
NSDictionary *codeDict = [self.jsonCodeData objectAtIndex:indexPath.row];
// Retrieve code string from dictionary
NSString *codeText = [NSString stringWithFormat:@"%@", [codeDict objectForKey:@"code"]];
tvcCell.codeTableLabel.text = codeText;
}
}
return cell;
}
让我困惑的是它的反应方式。当错误发生时,每 10 个单元格都有问题,而不是每个单元格。除了这些方法之外,我没有处理 tableviewcell 本身的任何东西。