Reputation: 2171
I have a tableView
and need to perform a function once the tableView
has been reloaded. How do I know if reloadData
has finished? Lets say I have methodA that populates the tableView
, and once [tableView1 reloadData]
has been completed, I want to call methodB. Can anyone help me with this? I've been searching for hours... Thank you!
- (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];
}
Upvotes: 0
Views: 9998
Reputation: 35783
Once I get updated data from server for my table.
I use following code snip to Hide progress bar when table reload gets complete.
[UIView animateWithDuration:0 animations:^{
[your_table_view reloadData];
} completion:^(BOOL finished)
{
//Table reload completed TODO here
//Hide progress bar etc.
}];
Upvotes: 2
Reputation: 539945
The problem is that you call reloadData
immediately after starting the URL request. That does not make sense because the request has not been completed at that point.
The correct way would be to call reloadData
and methodB
in connectionDidFinishLoading
, after you have updated your data source with the response from the URL request. At that point you know if the number of rows is zero or not, and there is no need to wait for the table view update to complete.
Upvotes: 2
Reputation: 46543
You can add a method/category on UITableView or even subclass UITableView:
-(void)reloadDataAndWait:(void(^)(void))waitBlock {
[self reloadData];//if subclassed then super. else use [self.tableView
if(waitBlock){
waitBlock();
}
}
And you need to use it as
[self.tableView reloadDataAndWait:^{
//call the required method here
}];
Upvotes: 5