我在普通的UIViewController中有一个UICollectionView。
在collectionview中,我为storyboard中的collectionviewcells设计了可重用的UI。
在集合视图单元内部有一个标签,显示单元格indexpath.row和5个UIButtons,如果选中,则更改颜色并保持选中状态。
我已经设置了集合视图,因此如果要求更多30个单元格,则集合视图将水平翻页,集合视图布局也是水平的。
应用程序运行良好,正确滚动并正确放置单元格。
我遇到的问题就是当你选择例如集合视图中的按钮A <单元1 (假设布局100个单元格)和页面翻页两页时(60多个单元格)到第3页,单元格编号75中的按钮A被选中。此外,如果您滚动到最后(100个单元格)并滚动回到第3页,则单元格编号75中的按钮A的选择时间会更长,但是单元格编号64中的按钮A会被选中即可。
以下是一些代码片段: cell.m - 控制用户的操作。
- (IBAction)bubbleButtons:(id)sender {
for(UIButton *bubbleCell in self.bubbleButtons) {
if (bubbleCell.touchInside && !bubbleCell.selected) {
bubbleCell.selected = YES;
} else if (bubbleCell.touchInside && bubbleCell.selected) {
bubbleCell.selected = NO;
}
}
}
MainViewContoller.m - 在故事板中设置UICollectionViewCell的单元格
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
Cell *cell1;
cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID
forIndexPath:indexPath];
cell1.numMainLabel.text = [NSString stringWithFormat:@"%d |",indexPath.row+1];
return cell1;
我真的不明白什么是错误或导致这个错误的原因,我假设当视图的新部分变得可见时,它会重新加载视图,但这只是猜测。非常感谢帮助。
答案 0 :(得分:2)
这可能是因为重用了可重用的视图。
执行此操作的正确方法是创建自定义可重用视图子类。 并保存那5个按钮的选择。
cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID
此行可能会或可能不会为您提供新单元格,它可能会为您提供之前使用过的单元格。因此,您需要在那里更新选择。或者它与它重复使用的单元格保持一致。
答案 1 :(得分:0)
Uicollection只生成当时显示的单元格,因此当单元格从可见视图中消失时,它将被替换为新单元格。
因此,当您选择单元格75并向下滚动,直到单元格75不可见,然后向后滚动回到单元格75,您将生成一个新单元格,其中包含一个未选中的新按钮,因为它是新的。
那么你可以做什么,是保存哪些按钮已被选中,并且在
中- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
询问是否需要选择当时显示的按钮..
希望它的帮助