UICwitch中UISwitch的数据表示错误

时间:2013-01-11 20:09:21

标签: ios uicollectionview uiswitch

我有一个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会随机出现在应该关闭的地方,反之亦然......我做错了什么?

1 个答案:

答案 0 :(得分:3)

可以在平铺视图中重复使用单元格。此代码看起来假设单元格未被重用:

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

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

一般来说,使用标签有点笨拙;您可以通过为您的单元格定义子类并将UISwitch连接到属性(通过,例如,插座)来找到它更清晰。