我的自定义UITableViewCells正在影响彼此的状态

时间:2013-11-06 19:26:16

标签: ios objective-c uitableview

我创建了一个带有UISwitch,UIStepper和内部两个标签的自定义UITableViewCell。

当我在模拟器中运行我的应用程序时,tableview列出了此自定义单元格的每个实例。我注意到当我在第一个单元格中切换开关并增加它的步进器(影响一个标签)时,第九个单元格会受到同样的影响。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSMutableArray *items = [self arrayForSection:indexPath.section];

    static NSString *CellIdentifier = @"Cell";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if(indexPath.section == 0){
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    cell.notificationTitle.text = [items objectAtIndex:indexPath.row];
    return cell;
}

我在这个tableview中也有两个部分,并设置第一个部分,以便选择样式关闭。

究竟发生了什么以及如何防止它发生?

2 个答案:

答案 0 :(得分:1)

您要在哪里创建自定义单元格?你是在做这件事还是只是因为你在这里粘贴它时错过了它?

试试这个(希望您使用NIB文件创建自定义单元格):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *questionTableIdentifier = @"CustomCell";

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:questionTableIdentifier];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    cell.notificationTitle.text = [items objectAtIndex:indexPath.row];
    return cell;
}

答案 1 :(得分:1)

当您使用此[tableView dequeueReusableCellWithIdentifier:questionTableIdentifier];时,您实际上正在重用已经制作的单元格实例(如果有任何重复使用,则创建一个新实例)。 UITableViews以这种方式工作以节省内存。如果你有非常多的单元格,它仍然只会消耗大约相同的内存量,就好像只有足够覆盖屏幕一样。为了解决您的问题,您需要将细胞的状态保持在其他位置,然后是细胞本身。也许是tableviewcontroller或viewcontroller中的数据结构。然后在tableview要显示单元格时设置值。

如果你使用不可重复使用的细胞,那么你可以做这样的事情。

@property(nonatomic, strong)NSArray *cells;

- (id)init
{
    self = [super init];
    if ( self )
    {
        _cells = @[@[[[YourCell alloc] init],
                    [[YourCell alloc] init],
                    [[YourCell alloc] init]
                   ],
                   [@[[YourCell alloc] init],
                    [[YourCell alloc] init],
                    [[YourCell alloc] init]]];
    }

    return self;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return _cells[indexPath.section][indexPath.row];
}

假设你有2个部分,每个部分有3个单元格。