当Web服务中没有新数据时,如何在iOS中停止Spinner动画?

时间:2014-10-31 07:57:43

标签: ios json uitableview

当我滚动表视图然后它开始动画并从Web服务加载下一页数据时,我在表视图页脚创建一个微调器,但是当我的Web服务数据不再可用时,我想让表视图页脚微调器停止动画如何可能请给我解决方案。 这里我的数据分析代码是

- (void)viewDidLoad
{
pageNum=0;
self.imageArray =[[NSMutableArray alloc]init];
NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.truemanindiamagazine.com/webservice/news.php?page=%d",pageNum]];
}
dispatch_async(kBgQueue, ^{
    data = [NSData dataWithContentsOfURL: url];
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}

}
-(void)fetchedData:(NSData *)responsedata
{
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.frame = CGRectMake(0, 0, 320, 44);
self.newsTable.tableFooterView = spinner;
if (responsedata.length > 0)
{
    [spinner startAnimating];
    NSError* error;
    self.json = [NSJSONSerialization JSONObjectWithData:responsedata options:kNilOptions error:&error];
    if ([[_json objectForKey:@"data"] isKindOfClass:[NSArray class]])
    {
        NSArray *arr = (NSArray *)[_json objectForKey:@"data"];
        [self.imageArray addObjectsFromArray:arr];
        [self.newsTable reloadData];
        NSLog(@"images,%@",self.imageArray);
    }
    self.newsTable.hidden=FALSE;
}

表视图滚动码是

 -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSInteger currentOffset = scrollView.contentOffset.y;
NSInteger maximumOffset = scrollView.contentSize.height- scrollView.frame.size.height;
if (maximumOffset - currentOffset <= 0)
{
pageNum = pageNum + 1;
[self getData];
}
 }
-(void)getData
{
NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.truemanindiamagazine.com/webservice/news.php?page=%d",pageNum]];
dispatch_async(kBgQueue, ^{
    data = [NSData dataWithContentsOfURL:url];
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}

如果可能,请给我解决方案。第二个问题是当我滚动表格视图然后它给我所有剩余页面数据然后我想要当我滚动然后我得到第二页数据和当我下次滚动然后我得到第三页数据如果任何可能性做一些时间间隔加载下一页的JSON数据?

2 个答案:

答案 0 :(得分:1)

从服务器获得响应后,如果其县为零则检查响应数组计数,然后使spinner停止动画并将微调器隐藏为yes。在else条件下,如果响应数组计数大于零,则使spinner开始动画,并将spinner隐藏为no。我希望这会对你有所帮助。我完成了这样的应用程序并且完美地为我工作。我也称我的申请为分页。 此外,如果arraycount为零,您可以按照代码

后面的tableview页脚

self.theTable.tableFooterView = [UIView new];

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

所有最好的@Ashish Gabani

答案 1 :(得分:1)

您可以在fetchData方法的末尾添加[spinner stopAnimating]。如果你完成提取数据,你想停止动画,对吧?另外,我认为你应该在getData中调用startAnimating方法。

要执行此操作,只需将微调器添加为viewController中的私有属性,然后在getData中开始设置动画,然后在fetchData的末尾停止它。

作为一般建议,而不是执行选择器。看看NSURLSessionDownloadTask并使用一个块来检索json调度到主队列。