ios - UICollectionView 和滚动程序错误

标签 ios objective-c uiscrollview uicollectionview uicollectionviewcell

我在普通的 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/

相关文章:

ios - 在 UIStoryboard 中向 UIScrollView 的 subview 添加约束的奇怪行为

iphone - UIScrollView 滚动时 loadHTMLString 不会触发

objective-c - 无法关闭键盘

ios - 如何在返回 View 时快速执行某些代码

ios - 无法关闭 MFMailComposeViewController,未调用委托(delegate)

ios - 具有相同数据源的多个 UICollectionView

ios - 防止 VoiceOver 导航 UICollectionView 的其他页面

ios - UIAlertController 操作表 whatsapp 样式

objective-c - 允许根据 url 字符串选择表格 View 单元格

iphone - objective-c 中的后台任务