我有一个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会随机出现在应该关闭的地方,反之亦然......我做错了什么?
答案 0 :(得分:3)
可以在平铺视图中重复使用单元格。此代码看起来假设单元格未被重用:
UISwitch *onoff=(UISwitch *) [cell viewWithTag:106];
onoff.tag=[cellValue._id_setlist intValue];
我认为这会将交换机的标签更改为106以外的内容。这意味着如果稍后重用该单元格,它将不再是106,并且顶行将返回nil。尝试删除我引用的第二行。 (您还可以通过记录滚动时在第一行中获得的onoff
值来确认这是问题。)
一般来说,使用标签有点笨拙;您可以通过为您的单元格定义子类并将UISwitch连接到属性(通过,例如,插座)来找到它更清晰。