我正在尝试将分组的UITableView存储在一个数组中(例如所有单个单元格),以便我可以保留用户点击的单元格(并将检查附件添加到其中)。每当我尝试恢复单元格时,我最终会显示最近显示的单元格(即,当向上滚动时,刚出现在屏幕底部的单元格出现在顶部。 我无法弄清楚这是否正确,所以任何帮助都是非常受欢迎的 感谢
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyManager *dataStore = (MyManager* )[MyManager sharedManager];
NSNumber *dif = [[NSNumber alloc] initWithInt:-1];
if (indexPath.section == 0) {
dif = [NSNumber numberWithInt:0];
} else if (indexPath.section == 1) {
dif = [NSNumber numberWithInt:3];
} else if (indexPath.section == 2) {
dif = [NSNumber numberWithInt:5];
} else if (indexPath.section == 3) {
dif = [NSNumber numberWithInt:9];
}
if ([dataStore.masterArray objectAtIndex:(indexPath.row+[dif intValue])]==@"0") {
//array is initalised with 16 strings of @"0", just to fill it
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
NSArray *listData =[self.data objectForKey:
[self.sortedKeys objectAtIndex:[indexPath section]]];
UITableViewCell * cell = [tableView
dequeueReusableCellWithIdentifier: SimpleTableIdentifier];
if(cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:SimpleTableIdentifier] autorelease];
}
NSUInteger Row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:Row];
cell.accessoryType = UITableViewCellAccessoryNone;
[dataStore.masterArray replaceObjectAtIndex:(indexPath.row + [dif intValue]) withObject:cell];
cell.textLabel.text = [listData objectAtIndex:Row];
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
}
else {
UITableViewCell *cell = [dataStore.masterArray objectAtIndex:(indexPath.row+[dif intValue])];
return cell;
}
}
我会假设此代码应检查索引中是否有单元格,如果没有则生成并显示一个(这样可以正常工作)。如果单元格确实存在,请将其从阵列中拉出并显示它。
答案 0 :(得分:0)
问题是单元格不是一次全部创建的。必要时会创建并销毁它们。如果细胞不在视野范围内,它们可能会被破坏以节省内存。不是将单元格本身存储在数组中,而是将布尔值存储在数组中。然后,当为特定行创建单元格时,使用数组中的bool值来确定是否应该检查它。