滚动时停止 CollectionView 以创建新按钮

Posted

技术标签:

【中文标题】滚动时停止 CollectionView 以创建新按钮【英文标题】:Stop CollectionView to create new Buttons while scrolling 【发布时间】:2014-02-26 22:50:38 【问题描述】:

我有一个问题。我在 CollectionView Cell 中有一个按钮,当它第一次被触摸时它会移动。这是“移动”代码:

[UIView animateWithDuration:0.5 animations:^
    _button.frame = CGRectMake(80,112,30,20);
];

但是当我向下滚动并再次向上滚动时,在其旧位置再次创建了相同的按钮,我该如何解决?移动的按钮仍然存在 -> 按钮在单元格中出现两次。 以下是按钮的创建方式:

-(UIButton *)button
    _button = [UIButton buttonWithType:UIButtonTypeCustom];
    _button.frame = CGRectMake(111,112,30,20);
    [_button setImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
    _button.backgroundColor = [UIColor clearColor];
    [_button addTarget:self
               action:@selector(decMethod)
         forControlEvents:UIControlEventTouchUpInside];
    return _button;

这里是 CollectionView 单元:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView           cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    CHTCollectionViewWaterfallCell *cell =
    (CHTCollectionViewWaterfallCell *)[collectionView     dequeueReusableCellWithReuseIdentifier:CELL_IDENTIFIER
                                                                           forIndexPath:indexPath];

[cell addSubview:cell.buttonInc];


return cell;

谢谢!

【问题讨论】:

【参考方案1】:

UICollection 会在性能需要时杀死不在屏幕外的单元格。在您的情况下,您可以创建一个 NSMutableArray 来记录所有单元格的移动历史。如果一个单元格已经移动,则将 YES 设置为数组的相应索引。在为按钮设置动画之前,只需检查数组以查找它是否已被移动。

【讨论】:

不行,CollectionView还是在第一个位置随机添加一个新按钮 因为 collectionView 会出于性能考虑自动重用单元格。如果在第一次之后不想要按钮,只需检查单元格的 contentView 的子视图,如果有按钮,则将其删除

以上是关于滚动时停止 CollectionView 以创建新按钮的主要内容,如果未能解决你的问题,请参考以下文章

CollectionViewCell 顶部的按钮使 collectionView 停止滚动

触摸 CollectionView 时禁用动画?

平移和滚动放大的collectionView xcode

Swift iOS -CollectionView 如何将单元格滚动到屏幕外

以编程方式从 CollectionView 单元推送 viewController 不起作用 - swift

如何在 CollectionView iOS 中停止自动重新加载和刷新图像