活动指示器仅动画一次

时间:2013-03-15 16:53:12

标签: iphone ios xcode uiactivityindicatorview activity-indicator

我正在编写一个使用AFNetworking框架执行HTTP请求的应用程序,收到的数据会被解析,然后放入表格视图

我创建了一个带有加载程序的特殊单元格,它显示了正在处理的请求。此单元格只有.xib文件,没有自定义类。 我在此单元格中添加了活动指示符,并选中了选项" Animating"在属性检查器中。

我也创建了BOOL ivar来显示这个单元格。

BOOL isLoading;

以下是"搜索"点击按钮:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    if ([searchBar.text length] > 0){

        isLoading = YES;
        [self.tableView reloadData];

        searchResults = [NSMutableArray arrayWithCapacity:10];

        NSURL *url = [self urlWithSearchText:searchBar.text];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];

        AFJSONRequestOperation *operation = [AFJSONRequestOperation
             JSONRequestOperationWithRequest:request
             success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

                 [self parseDictionary:JSON];
                 [searchResults sortUsingSelector:@selector(compareName:)];

                 isLoading = NO;
                 [self.tableView reloadData];
             }
             failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){

                 [self showNetworkError];
                 isLoading = NO;
                 [self.tableView reloadData];
             }];

        [queue addOperation:operation];
    }
}

这就是我如何获得那个细胞

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (isLoading) {
        return [tableView dequeueReusableCellWithIdentifier:LoadingCellIdentifier];
    } 
    /*other code */
}

当我执行我的第一次搜索时,此单元格显示动画指示器并且一切正常,但所有其他时间此单元格显示的指示符不会旋转,这就是问题所在。为什么会这样?如何让它在所有其他时间旋转?

此处应用http://monosnap.com/image/TRFK4cXEvYK2VPpteE1j5x0eB.png

的屏幕截图

2 个答案:

答案 0 :(得分:2)

停止动画并隐藏单元格时,不会取消分配。这意味着下次加载单元格时,它将采用与隐藏单元格时相同的状态。加载单元格后,您需要调用[activityView startAnimating];

答案 1 :(得分:0)

一旦尝试这样,在tableView willDisplayCell:方法中隐藏你的警报,而不是在JSONRequestOperationWithRequest之后:如下所示的成功方法,

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
//hide your alert,i think in your case isLoading = NO to hide alert so,
isLoading = NO;
}

希望它会帮助你......