在用户按下我的收藏单元格中的按钮后,我正在为 ActivityIndicator 设置动画,同时等待网络响应。下面的代码由自定义单元格的每个实例调用(在调试器中确认),但活动指示器仅在单击第一个单元格中的按钮时显示,或者在重复使用第一个单元格的单元格中单击时显示。如果我在第一个单元格之前单击另一个单元格中的按钮并不重要。
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
}
我确保在准备重用时从超级视图中删除指标并将其设置为 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
});