仅在reloadData完成后调用函数

Bra*_*don 0 iphone xcode objective-c ios

我有一个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];

}
Run Code Online (Sandbox Code Playgroud)

Ano*_*dya 5

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

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

而你需要使用它

[self.tableView reloadDataAndWait:^{
    //call the required method here                                            
}];
Run Code Online (Sandbox Code Playgroud)

  • @AnoopVaidya:`[self.tableView reloadData]之间***没有区别***; [self methodB];`和`[self.tableView reloadDataAndWait:^ {[self methodB]}];`. - `reloadData`总是快速返回,可见单元格的实际更新是异步完成的. - 如果你的答案对布兰登有帮助,那就没关系,但我真的不知道怎么回事. (5认同)
  • 对不起,我不知道这有用.调用`[self.tableView reloadDataAndWait:^ {[self methodB]}];`与调用`[self.tableView reloadData]相同; [self methodB];`顺序. - 如果在后台线程上调用`reloadData`会有区别,但是不允许这样做. (4认同)