UITableView仅在我滚动后填充

时间:2015-02-24 11:21:02

标签: ios objective-c uitableview

我在2个视图控制器中有2个表视图。当我从第一个屏幕中选择一个单元格时,我想加载第二个表格,但我的问题是:表格为空并在滚动后填充。

这就是我填充表格的方式:

选择单元格时:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSURL *url = [NSURL URLWithString:@"http://privatereisen.com/"];

    ProgViewController *cd = [self.storyboard instantiateViewControllerWithIdentifier:@"progidentifview"];
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

    NSString *path=[NSString stringWithFormat :@"dok/TV/pays/italie/json/chaine%d.json",indexPath.row];
    [httpClient postPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)

     {resultofData = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];


         NSString *valuKey=[NSString stringWithFormat :@"chaine%d",indexPath.row];
         NSArray *testArray =[resultofData valueForKey:valuKey];


         cd.categ=[[NSArray alloc]initWithArray:testArray];
         cd.categArray=[[NSArray alloc]initWithArray:self.categoryArray];






     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         [[[UIAlertView alloc]initWithTitle:@":( " message:@"Pas d'internet !" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]show];
         //   NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);

     }];
    [self.navigationController pushViewController:cd animated:YES];


    [tableView cellForRowAtIndexPath:indexPath].selected = NO;


}

并在ProgViewController中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    cprogCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifproecell"];

    cell.heure.text = [[_categ objectAtIndex:indexPath.row]objectForKey:@"horaire_programme"];
    cell.type.text = @"";
    cell.desc.text = [[_categ objectAtIndex:indexPath.row]objectForKey:@"nom_programme"];


    return cell;


}

2 个答案:

答案 0 :(得分:1)

一旦异步请求完成,您需要重新加载UITableView。目前你将UIViewController推送到堆栈上,然后稍后设置它的数据源,所以只有滚动后才能加载单元格。

要解决此问题,请在设置cd.categcd.categArray后,确保您致电[cd.tableView reloadData]categcategArray的设置者致电[self.tableView reloadData]

答案 1 :(得分:1)

太晚了,但我认为你正在处理要在错误的地方显示的数据。在一段时间内,用户体验是看到没有数据的空白屏幕。

将所有数据移动到被推送的控制器中会更好。因此,在您的选择中,创建控制器并将要提取的数据设置为属性。在ProgViewController中,当在viewDidAppear内部启动提取并激活一个活动指示器,显示它正忙。成功或失败时停止活动指示。成功时,调用self.tableView.reloadData。失败时,提高警报并弹出控制器。

这样一切都被封装和处理在正确的位置,随着内部数据状态的变化,UI会自动更新。

如果你从初始控制器中进行提取,那么你应该显示它的忙,只有在你有结果显示恕我直言后才推新控制器。