在数组中存储分组的UITableView

时间:2011-03-21 01:06:42

标签: iphone objective-c

我正在尝试将分组的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;
}

}

我会假设此代码应检查索引中是否有单元格,如果没有则生成并显示一个(这样可以正常工作)。如果单元格确实存在,请将其从阵列中拉出并显示它。

1 个答案:

答案 0 :(得分:0)

问题是单元格不是一次全部创建的。必要时会创建并销毁它们。如果细胞不在视野范围内,它们可能会被破坏以节省内存。不是将单元格本身存储在数组中,而是将布尔值存储在数组中。然后,当为特定行创建单元格时,使用数组中的bool值来确定是否应该检查它。