0

我有一个要求,我的 UITableview 应该在从 Web 服务检索数据后加载数据。检索大量数据时,我的 uitableview 显示为空。取而代之的是,一个 UIActivityIndi​​cator 应该出现,直到数据加载到 UITableview 中。

我正在尝试如下,但无法获得所需的功能。请帮忙。

当从 web 服务返回的数据很大时,我还建议将数据加载到 UITableview 中的最佳方法是什么。

提前致谢。

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

  UILabel *lblName = (UILabel *)[cell viewWithTag:1];
    [lblName setText:[myArray objectAtIndex:[indexPath row]]];
    return cell;
}

- (void)dataLoading
{
    myActivityIndicator=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [myActivityIndicator setFrame:CGRectMake(140, 170, 40, 40)];
    [self.view addSubview:myActivityIndicator];
    [myActivityIndicator startAnimating];

    NSString *playersDatalink = [NSString stringWithFormat:@"Webservice link"];

    NSURL *JsonPlayersDataURL = [NSURL URLWithString:playersDatalink];
    NSString *JsonPlayersData = [[NSString alloc] initWithContentsOfURL:JsonPlayersDataURL];

    SBJSON *playersDataParser = [[SBJSON alloc] init];
    NSDictionary *PlayersDicdata = (NSDictionary *) [playersDataParser objectWithString:JsonPlayersData error:nil];
    NSDictionary *playersdata = (NSDictionary *) [PlayersDicdata objectForKey:@"players"];
    NSLog(@"palyersdata is =%@",playersdata);
    self.myArray = [NSMutableArray arrayWithCapacity:[playersdata count]];
    for (NSDictionary *details in playersdata) {
        [self.myArray addObject:[details objectForKey:@"teamid"]];
    }
    if ([playersdata count]==0) {
        UIAlertView *myalert = [[UIAlertView alloc]initWithTitle:@"Webserive error " message:@"No data returned from webservice" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [myalert show];
    }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self performSelector:@selector(dataLoading) withObject:nil afterDelay:0.0];
    [myActivityIndicator stopAnimating];

}
4

2 回答 2

1

嗨 下载这个 zip http://www.sendspace.com/file/l48jxg解压这个文件,你会得到两个.h.m 用于加载 Indicatore 视图。将其拖放到您的项目中。

现在您可以像 Bellow 一样使用它:-

如果您希望在未加载数据之前显示活动指示器:-

import LoadingView.h into your Class,

创建对象

loadingView =[LoadingView loadingViewInView:self.view:@"Please Wait.."]; 这时候把这个like olso的代码yourTableView.userInterfaceEnable=FALSE;

并在数据加载完成方法中放置这个

[loadingView removeFromSuperview];

yourTableView.userInterfaceEnable=TRUE;

您正在加载视图,例如:-

在此处输入图像描述

更新

它不会满足您的 TableView 委托首先执行。

1)如果您使用NSURLConnectionFor Parsong WebServices,您可以在加载完成后重新加载您的 TableView 数据:-

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    

    //your code
    [yourTableView reloadData];
    
}

2)如果您使用NSXMLParser For Parsong WebServices,您可以在加载完成后重新加载您的 TableView 数据:-

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{

    //your code
    [yourTableView reloadData];
}
于 2013-02-22T05:23:21.323 回答
0

试试这个活动指示器,它会在您的数据加载之前停止用户交互。

使用 github 上的 MBProgressHud

有一个快乐的编码..

于 2013-02-22T05:13:35.507 回答