【发布时间】:2014-03-18 08:30:53
【问题描述】:
我的收藏视图底部加载了一个自定义单元格。它唯一的工作是显示一个活动指示器视图——这发生在应用程序进行新的工作调用时。
所以我像这样将它添加到单元格中:
BBLoaderCell *loaderCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LoaderCell" forIndexPath:indexPath];
UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
activityIndicator.hidden = NO;
activityIndicator.center = loaderCell.imageView.center;
activityIndicator.tag = 10;
[loaderCell.imageView addSubview:activityIndicator];
[activityIndicator startAnimating];
return loaderCell;
这在我视图的最后一个单元格中显示了一个活动指示器 - 但是它没有旋转。有什么想法吗?
找到解决方案
根据 cmets - 这是一个线程问题。我还接受了将代码移动到单元格的自定义 nib 文件的建议。
这里是重构的代码:
BBLoaderCell *loaderCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LoaderCell" forIndexPath:indexPath];
loaderCell.backgroundColor = [UIColor clearColor];
if (self.loadingMore == NO){
dispatch_async(dispatch_get_main_queue(), ^{
activityIndicator.hidden = YES;
[loaderCell.spinner stopAnimating];
});
}
else if (self.loadingMore == YES){
dispatch_async(dispatch_get_main_queue(), ^{
activityIndicator.hidden = NO;
[loaderCell.spinner startAnimating];
});
}
return loaderCell;
这是我需要的工作。
谢谢各位!
【问题讨论】:
-
我认为这可能与线程有关,您可以尝试以下操作吗:
[activityIndicator performSelector:@selector(startAnimating:) withObject:nil afterDelay:1];,动画应该在单元格加载后一秒钟开始。 -
只是一个小建议,如果您在自定义单元格中使用 nib 文件,只需在实际的 .xib 中添加活动指示器,而不是在 cellForRow 中添加它,这样可以使代码更简洁
-
谢谢各位。你的两个cmets都有帮助。我会投票两个。 @hless 请让您的评论成为答案,以便我标记它。
-
很高兴它有所帮助,尽管我对答案不是 100% 满意。希望我确切地知道是什么原因造成的......
-
我认为这与在后台线程上执行 UI 更新有关。根据 Apple 的说法,哪一个不应该发生并导致上述问题?
标签: ios iphone uicollectionview uiactivityindicatorview