仅在reloadData完成后调用函数

时间:2013-03-05 08:17:38

标签: iphone ios objective-c xcode

我有一个tableView,需要在重新加载tableView后执行一项功能。我如何知道reloadData是否已完成?假设我有方法A填充tableView,一旦[tableView1 reloadData]完成,我想调用methodB。谁能帮我这个?我一直在寻找好几个小时......谢谢!

- (void) methodA
{

    NSString *URLa = [NSString stringWithFormat:@"http://www.website.com/page.php?
    v1=%@&v2=%@&v3=%@",v1, v2, v3];

    NSURL *url = [NSURL URLa];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    (void) [[NSURLConnection alloc] initWithRequest:request delegate:self];

    [tableView1 reloadData];

}

3 个答案:

答案 0 :(得分:5)

您可以在UITableView甚至子类UITableView上添加方法/类别:

-(void)reloadDataAndWait:(void(^)(void))waitBlock {
    [self reloadData];//if subclassed then super. else use [self.tableView
    if(waitBlock){
        waitBlock();
    }
}

您需要将其用作

[self.tableView reloadDataAndWait:^{
    //call the required method here                                            
}];

答案 1 :(得分:2)

问题是您在启动URL请求后立即致电reloadData。这没有意义,因为此时请求尚未完成。

使用来自网址请求的响应更新数据源后,正确的方法是在reloadData中调用methodBconnectionDidFinishLoading。此时,您知道行数是否为零,并且无需等待以使表视图更新完成。

答案 2 :(得分:2)

从服务器获取更新的数据后,我的表就会出现。

当表重新加载完成时,我使用以下代码片段来隐藏进度条。

[UIView animateWithDuration:0 animations:^{
            [your_table_view reloadData];
        } completion:^(BOOL finished)
        {
            //Table reload completed TODO here
            //Hide progress bar etc.
        }];