2

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

我用加载器创建了一个特殊的单元格,它会在请求进行时显示。这个单元格只有一个 .xib 文件,没有自定义类。我在这个单元格中添加了活动指示器,并在属性检查器中选中了“动画”选项。

我还创建了 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

4

2 回答 2

2

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

于 2013-03-15T16:59:44.220 回答
0

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

-(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;
}

希望它会帮助你...

于 2013-03-16T13:09:06.137 回答