1

我有一个 UICollectionView 我代表从 SQLite 数据库中获取的数据。当我向上和向下滚动 CollectionView 时,我遇到了 UISwitch 问题:

-(UICollectionViewCell *)collectionView:(UICollectionView *)cv 
     cellForItemAtIndexPath:(NSIndexPath *)indexPath {

 city_setlist *cellValue = [self.arr objectAtIndex:indexPath.row];

 UISwitch *onoff=(UISwitch *) [cell viewWithTag:106];
 onoff.tag=[cellValue._id_setlist intValue];
    
 if([cellValue._was_there isEqualToString:@"1"])
     [onoff setOn:YES animated:YES];
 else
     [onoff setOn:NO animated:YES];
}

如果我不滚动,数据就可以了,但是如果我开始上下滚动 CollectionView,UISwitch 会随机打开它应该关闭的位置,反之亦然。我究竟做错了什么?

4

1 回答 1

3

单元格可以在平铺视图中重复使用。这段代码看起来像是假设单元格没有被重用:

UISwitch *onoff=(UISwitch *) [cell viewWithTag:106];
onoff.tag=[cellValue._id_setlist intValue];

我假设这会将开关的标签更改为 106 以外的值。这意味着如果该单元格稍后被重用,它将不再是 106,并且顶行将返回 nil。尝试删除我引用的第二行。onoff(您也可以通过在滚动时记录您在第一行中获得的值来确认这是问题所在。)

一般来说,使用标签有点麻烦。通过为您的单元定义一个子类并将 UISwitch 连接到一个属性(例如,通过一个插座),您可能会发现它更干净。

于 2013-01-13T20:24:20.023 回答