如何停止活动指标?

时间:2012-01-30 08:31:13

标签: iphone objective-c uiactivityindicatorview

如何停止UIActivityIndi​​catorView?此代码不起作用。

BubbleTableViewCell.h:

@interface BubbleTableViewCell : UITableViewCell {

    UIActivityIndicatorView *activity;
}

BubbleTableViewCell.m:

- (void)setActivity:(BOOL)value {

    if (value) {
        activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        activity.center = CGPointMake(15, 15);
        [activity startAnimating];
        [self.contentView addSubview:activity];
    }
    else {
        [activity stopAnimating];
        [activity removeFromSuperview];
        [activity release];
    }
}

4 个答案:

答案 0 :(得分:0)

我只能假设您需要活动指示符的位置和原因,但如果您在加载数据时需要它,则可以这样做:

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell * cell;
MyCustomCell * myCell = [TableViewCellsFactory loadCellFromNibWithName:@"myCell" identifier:@"myCell" tableView:aTableView owner:self];
if(dataIsLoading) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"loadingCell"] autorelease];
    UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [activityIndicator startAnimating];
    [activityIndicator setFrame:CGRectMake(140, 40, 40,  40)];
    [cell addSubview:activityIndicator];
}
else {
    //here you customize myCell
    cell = myCell;
}
return cell;

这对我来说非常适合....

答案 1 :(得分:0)

在这两种情况下只需调试值的状态。我认为BOOL值一旦设置为true,则不会更改为false以执行其他部分。

答案 2 :(得分:0)

您是否将活动设置了两次? 如果您使用相同的BOOL值调用此函数两次

,则可能会丢失参考

答案 3 :(得分:0)

假设您想在UITableViewCell中显示活动指示器,而某些数据(如图像)被下载,一旦下载完毕,您就想要停止指示器。在tableView:cellForRowAtIndexPath:方法中执行此操作的一种方法是:

  • 检查需要下载的数据(例如图像)是否可用。
  • 如果数据可用,请在参数中使用setActivity:调用方法NO
  • 但是如果数据不可用,则在参数中使用setActivity:调用方法YES,然后开始下载相应的数据。
  • 下载数据后,使用
    - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
    重新加载特定单元格
  • 现在,当调用tableView:cellForRowAtIndexPath:时,将下载该行的数据,并在参数中使用setActivity:调用方法 NO,这将隐藏指标(如果有的话)。

使用这种方法你必须稍微修改一下这个函数:


- (void)setActivity:(BOOL)value 
{
  if (value)
  {
    activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activity.center = CGPointMake(15, 15);
    [activity startAnimating];
    [self.contentView addSubview:activity];
  }
  else
  {
    if(activity)
    {
      [activity stopAnimating];
      [activity removeFromSuperview];
      [activity release];
    }
  }
}