iphone - iphone如何向每个单元中添加UIActivity指示器并保持每个显示器的控制

  显示原文与译文双语对照的内容
131 1

我正在尝试将活动指示器添加到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];



捕捉是我需要从另一个方法控制这些多个活动指标。 但是我们还是可以通过initialising的新实例来实现这一点,这就意味着我只需要控制一个活动指标,就意味着我只能控制一个实例。

我需要在这里做什么来保持对所有actIndicators的引用,以便开始动画所有的( 如果可能的话) 。 还是我可以用 actindicator.tag 来控制某种形式的参考。

感谢你的帮助。

EDIT: ( 来自答案) 可以使用下面的方法来访问活动指示器的所有实例,其中的标记为1,可以从另一个方法中使用:


for (UITableViewCell *cell in [self.tableView visibleCells]) {


 UIActivityIndicatorView *actView = (UIActivityIndicatorView *)[cell.contentView


 viewWithTag:1];


 [actView startAnimating];


 activityFlag = 1;



}



上面的方法将循环遍历所有可见的单元格并开始激活活动指示器。

为了处理正在滚动的tableview的情况,我使用下面的方法对指示器进行动画处理。 cellStateKey简单地指示单元格旁边是否有标签,如果设置了选项卡,则设置 activityflag ( 异步web服务器调用正在进行) ( 从技术上开始动画)


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];



 }



 }



就像在origional问题中提到的,我在方法didSelectRowAtIndexPath中初始化了活动指示器( 如果需要,也删除活动指标)

时间: 原作者:

117 2

一种简单的方法是通过调用( 假设你正在将指示器添加到代码中) 在表中获取一个可以见单元格( 行或行)的集合。 然后,像这样循环遍历单元格:


for (UITableViewCell *cell in [tableView visibleCells]) {


 for (UIView *sub in [cell subViews]) {


 if (sub.tag == 1) {//"1" is not a good choice for a tag here


 UIActivityIndicatorView *act = (UIActivityIndicatorView *)sub;


 [act startAnimating];//or whatever the command to start animating is


 break;


 }


 }


}



你要处理的复杂性更多: 在原始代码中,需要确保每次调用 cellForRowAtIndexPath 时不添加附加活动指示器。

原作者:
66 5

你可以将UIActivityIndicatorView添加为单元格的accessoryView 。


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {



 UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];


 spinner.frame = CGRectMake(0, 0, 24, 24);


 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];


 cell.accessoryView = spinner;


 [spinner startAnimating];


 [spinner release];


}



原作者:
138 0

你需要通过扩展它来创建一个定制的UITableViewCell 。 然后将UIActivityIndicatorView作为该单元格的成员。 然后你就可以访问它,并通过细胞来控制它。

原作者:
140 4

假设活动视图标记标记在 cell.contentView 中是唯一的,你可以尝试以下操作:


UITableViewCell *cell = [tableview cellForRowAtIndexPath:indexpath];



UIActivityIndicatorView *acView = (UIActivityIndicatorView *)[cell.contentView viewWithTag:1];



//acView will be your activitivyIndicator



原作者:
...