我正在尝试向 UITableView 中的某些单元格添加活动指示器。我在方法 didSelectRowAtIndexpath 使用成功地做到了这一点
CGRect CellFrame = CGRectMake(260, 10, 20, 20);
actindicator = [[UIActivityIndicatorView alloc]initWithFrame:CellFrame];
[actindicator setHidesWhenStopped:NO];
[actindicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
actindicator.tag =1;
[[cell contentView] addSubview:actindicator];
问题是我需要通过另一种方法控制这些多个活动指标。我认为一个属性是一种方法来做到这一点,但是通过每次初始化一个新的actIndicator实例,我失去了对活动指示器的“最新”初始化之外的所有引用,因此这意味着我只能控制一个。
我需要在这里做什么(如果可能的话?)以保持对所有 actIndicators 的引用,以便我可以开始为所有这些设置动画?或者我能否以某种方式使用 actindicator.tag 来控制某种形式的参考。
非常感谢您的帮助。
编辑:(源自答案)访问 tableView 中标记为 1 的所有 Activity 指示器实例(仅可见单元格)可以从另一种方法使用下面的:
for (UITableViewCell *cell in [self.tableView visibleCells]) {
UIActivityIndicatorView *actView = (UIActivityIndicatorView *)[cell.contentView
viewWithTag:1];
[actView startAnimating];
activityFlag = 1;
}
上述方法将循环遍历所有可见单元格并开始为活动指示器设置动画。
为了处理 tableview 被滚动的情况,我使用 cellForRowAtIndexPath 中的下面的方法重新为指标设置动画。cellStateKey 仅指示单元格旁边是否有复选标记,如果它确实有复选标记并且我的活动标志(正在进行的异步网络服务器调用)已设置..然后我想继续动画。(技术上重新启动动画,作为滚动表视图停止它)
if ([[rowData objectForKey:cellStateKey] boolValue]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
if(cell.accessoryType == UITableViewCellAccessoryCheckmark &&activityFlag ==1){
for (UIView *sub in [[cell contentView] subviews]) {
if (sub.tag == 1) {
UIActivityIndicatorView *acView = (UIActivityIndicatorView *)
[cell.contentView viewWithTag:1];
[acView startAnimating];
}
}
如原始问题中所述,我在方法 didSelectRowAtIndexPath 中初始化我的活动指标(并在需要时删除活动指标)