2013-05-07 42 views
2

我想要一个活动的指标在我的UITableView添加到某些细胞的控制。我成功做到这一点的方法didSelectRowAtIndexPath方法使用如何添加一个UIActivity指标,以每一个细胞和维护每个个体指标

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来控制某种形式的参考。

非常感谢任何帮助。

编辑:(来自应答所得出)来访问活动指示符的所有实例与1中的tableView标签(可见细胞只)可以从另一方法如下使用方法:

for (UITableViewCell *cell in [self.tableView visibleCells]) { 
    UIActivityIndicatorView *actView = (UIActivityIndicatorView *)[cell.contentView 
    viewWithTag:1]; 
    [actView startAnimating]; 
    activityFlag = 1; 

} 

上述意愿的方法循环遍历所有可见的单元格并开始动画指示器的动画。

为了处理的tableview的情况下被滚动,我重新使用动画下面这是在的cellForRowAtIndexPath方法中的指标。 cellStateKey只是表示单元格旁边是否有复选标记,如果它有一个复选标记,并且我的活动标记(正在进行异步Web服务器调用)被设置为..然后我想继续动画(技术上重新启动动画,如滚动tableview停止吧)

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方法

回答

3

一个简单的方法来做到这一点(假设你要添加的指标,因为在你的代码)是先得到你的表可见单元格(或行)的集合,通过调用[tableView visibleCells]

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被调用,并且您需要考虑用户可能稍后滚动表的情况,从而暴露没有打开其活动指示符的单元格。

+0

非常感谢!虽然这段代码确实可以让你从另一种方法访问activityIndi​​cators,这种方法最终是我所追求的。我用它在滚动后重新制作指标。 – user1144466 2013-05-09 04:11:31

2

你需要通过扩展它来创建一个自定义的UITableViewCell删除藏汉如果需要活动的指标)。然后有一个UIActivityIndi​​catorView作为该Cell的成员。然后您可以访问它并逐个单元格地控制它。

8

您可以添加UIActivityIndi​​catorView作为细胞的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]; 
} 
+0

三江源,是的,这是我如何初始化选定单元格的好手。我更多的是在UIbutton出版后如何从另一种方法访问这些spinners以开始动画。请参阅编辑。 – user1144466 2013-05-09 03:51:55

1

假设活动视图指标标签是你可以尝试这样的cell.contentView独特:

UITableViewCell *cell = [tableview cellForRowAtIndexPath:indexpath]; 

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

//acView will be your activitivyIndicator 
相关问题