I have a tableView, and a “Reload” button that fetches data from a URL and reloads the table, a costly operation (in particular the fetch part).
I want display info to the user while this is happening, so I thought I’d put up a “Loading” UITextView on top, do the fetch/reload operation, then remove the UITextView.
Here’s the code:
- (IBAction)refreshData:(id)sender {
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-30, self.view.frame.size.width, 30)];
[self.view addSubview:textView];
textView.text = @"Loading..";
textView.textColor = [UIColor whiteColor];
textView.backgroundColor = [UIColor grayColor];
textView.editable = NO;
[self fetchData];
[self.tableView reloadData];
[textView removeFromSuperview];
}
The behavior I get is that the fetchData executes before the UITextView renders on screen. I know this because I have NSLogs inside fetchData that execute before the UITextView shows up on screen.
Is there something obvious I’m missing here? Thanks.
Replace
[self fetchData];withThen inside your
fetchDatamethod, after your fetch is done, addwhere the new method
fetchDataFinishedis defined asNote that you have to make
textViewa property so it is accessible in this method.I have not tried out the above for your particular case, but I have used similar constructs successfully in many similar situations.