自定义UICollectionViewCell内的UIActivityIndi​​cator - 仅在第一个单元格中显示/动画

时间:2013-10-26 23:46:15

标签: ios uicollectionview uiactivityindicatorview uicollectionviewcell

在用户按下我的集合单元格中的按钮后,我正在设置ActivityIndi​​cator,同时我等待网络响应。下面的代码由自定义单元格的每个实例调用(在调试器中确认),但活动指示器仅在第一个单元格中单击按钮时显示,或者在重用第一个单元格的单元格中单击时显示。如果我在第一个单元格之前单击另一个单元格中的按钮并不重要。

customCollectionViewCell.m
@interface customCollectionViewCell(){
    UIActivityIndicatorView *activityIndicator;
}

@implementation cutomCollectionViewCell
 - (void) choiceClicked:(id)sender{

   dispatch_async(dispatch_get_main_queue(), ^{
        activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
        actvityIndicator.center = self.center;
        [self.contentView addSubview:activityIndicator];
        [actvityIndicator startAnimating];
    });
    async - network stuff
}

我确保准备重用,我正在从superview中删除指标并设置为nil。

我也尝试过只创建指标,如果它不存在并开始动画 - 行为仍然没有变化 编辑:如果仅从主线程调用动画并且其他调用明确地是默认队列的一部分也无关紧要。

if (activityIndicator == nil){
    activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    activityIndicator.center = self.center;
    [self.contentView addSubview:activityIndicator];
}
dispatch_async(dispatch_get_main_queue(), ^{
    [activityIndicator startAnimating];
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    network call
        });

1 个答案:

答案 0 :(得分:8)

自定义单元格中的Self.center返回一个CGPoint,其中滚动视图中的Y值=位置,而不是单元格高度的中心,这将活动视图放置在单元格的可见框架之外。

这使活动指示符适用于所有单元格: activityIndicator.center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

相关问题