我在普通的 UIViewController 中有一个 UICollectionView。
在collectionview中,我为storyboard中的collectionviewcells设计了可重用的UI。
collectionviewcell 内部有一个标签,显示单元格 indexpath.row 和 5 个 UIButtons,如果选择这些按钮,则会更改颜色并保持选中状态。
我已经设置了collectionview,这样如果请求的单元格超过30个,collectionview将水平分页,collectionview布局也是水平的。
应用程序运行良好,滚动正确,单元格布局正确。
我遇到的问题是当您在collectionviewcell(假设布局100个单元格)中选择单元格1中的按钮A并分页超过两页时(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 - 从 Storyboard中制作的 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;
我真的不明白什么是错误的或是什么导致了这个错误,我假设它与当 View 的新部分变得可见时重新加载 View 有关,但这只是一个猜测。我们将不胜感激。
- 扎克
最佳答案
可能是因为可重用 View 被重用了。
执行此操作的正确方法是创建自定义可重用 View 子类。 并保存对这 5 个按钮的选择。
cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID
这里的这一行可能会也可能不会给你一个新的单元格,它可能会给你一个以前使用过的单元格。因此,您需要更新其中的选择。或者它与它重复使用的单元格保持不变。
关于ios - UICollectionView 和滚动程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18936164/