2

我在普通的 UIViewController 中有一个 UICollectionView。

在集合视图中,我为情节提要中的集合视图单元设计了可重用的 UI。

在 collectionviewcell 内部有一个标签,显示单元格 indexpath.row 和 5 个 UIButtons,如果选中,它们会更改颜色并保持选中状态。

我已经设置了collectionview,以便如果请求超过30 个单元格,collectionview 将水平分页,collectionview 布局也是水平的。

该应用程序运行良好,可以正确滚动并正确布置单元格。

我遇到的问题是,当您在 collectionviewcell的单元格 1 中选择例如按钮 A(假设布局 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;

我真的不明白什么是错误的或导致此错误的原因,我假设它与视图的新部分变得可见时重新加载的视图有关,但这只是一个猜测。帮助将不胜感激。

  • 扎克
4

2 回答 2

2

这可能是因为可重用的视图被重用了。

正确的方法是创建自定义可重用视图子类。并保存对这 5 个按钮的选择。

        cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID

这里的这一行可能会或可能不会给你一个新的单元格,它可能会给你一个以前使用过的单元格。因此,您需要更新其中的选择。或者它与它正在重用的单元格保持相同。

于 2013-09-21T18:50:16.513 回答
0

Uicollection 仅生成当时显示的单元格,因此当单元格从可见视图中消失时,它会被新的单元格替换。

因此,当您选择单元格 75 并向下滚动时,直到单元格 75 不可见,然后您滚动回单元格 75,您正在生成一个新单元格,其中包含一个未选择的新按钮,因为它是新按钮。

所以你可以做的是保存已选择的按钮,并在

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

询问是否需要选择当时显示的按钮..

希望它有帮助

于 2014-04-25T00:41:48.523 回答