在我们的iPgone& iPad应用程序我们在不同的ui控制器之间使用推送segue转换,其中大多数扩展UICollectionViewController
。在每个控制器中,我们从内部API加载数据。正在加载viewWillAppear
或viewDidLoad
现在,事情是,这个API调用有时可能需要一两秒,甚至三个......好吧,很多东西,让我们假设我们无法改变它。但是,我们可以改变用户体验并至少添加“加载”圈指示符。问题是,通过正确的概念我无法理解,当从A转换到B时,“加载”在B处完成,而页面A仍然呈现。
因此,问题是“如何在页面A上显示指示器,同时为页面B加载控制器?”
谢谢大家,
URI。
答案 0 :(得分:2)
这种情况下的常见方法是在主线程中的目标视图控制器中加载数据。您可以在后台线程中加载数据时显示指示符,然后将其删除。
以下是解决同一问题的项目代码示例:
- (void) viewDidLoad {
...
// add indicator
self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.spinner.hidesWhenStopped = YES;
self.spinner.center = self.view.center;
[self.view addSubview:self.spinner];
...
// fetch news
[self.spinner startAnimating];
__weak typeof(self) weakSelf = self
[[BitrixApiClient sharedInstance] getLatestNewsWithCompletionBlock:^(NSArray *newsArray, NSUInteger maxPageCount, NSUInteger currentPageNumber, NSError *error) {
if (!error) {
weakSelf.newsArray = newsArray;
weakSelf.currentPageNumber = currentPageNumber;
[weakSelf.newsTableView reloadData];
}
// stop spinning
[weakSelf.spinner stopAnimating];
}];
}