我的问题很常见。我想显示一些“加载”内容,同时下载将在表中显示的数据。但是我到目前为止看到的所有解决方案都是向细胞添加一些微调器,或者在应用程序上放置一些半透明视图。
我想要活跃的是苹果在其应用中所做的事情(例如YouTube)。比如,带有“正在载入”字样的旋转轮显示在白色背景上,然后显示数据。
我也看到了一些带有分组风格的解决方案,但我的桌子有一个简单的风格,所以我认为它并没有帮助我。
我的最终代码如下:
- (void)loadImagesData
{
UIView *tableView = self.view;
self.view = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, 320, 367)];
dispatch_queue_t downloadQueue = dispatch_queue_create("flickr downloader", NULL);
dispatch_async(downloadQueue, ^{
NSArray *images = [FlickrFetcher photosInPlace:self.place maxResults:MAX_PHOTOS];
dispatch_async(dispatch_get_main_queue(), ^{
self.view=tableView;
self.imagesData = images;
});
});
dispatch_release(downloadQueue);
}
和imageData setter在表视图上调用reloadData
。
答案 0 :(得分:10)
UIViewController
(而不是UITableViewController
- 即使您要提交表格也是如此)请不要忘记添加协议和方法以控制您的tableview
我希望这会对你有所帮助
答案 1 :(得分:2)
另一个答案是在UITableViewController中显示一个活动指示器,而不将其更改为UIViewController。
在故事板中,在表格视图中添加活动指示符(但不在TableViewCell上方!)。它将位于表视图标题内(不是节标题!)
将活动指示器的插座连接到您的班级文件
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
使用这些功能显示或隐藏活动指示器
// enable tableview and hide the activity indicator
func activateScreen() {
self.tableView.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: tableView.frame.width, height: 0)
self.tableView.tableHeaderView = self.tableView.tableHeaderView // necessary to really set the frame
activityIndicator.stopAnimating()
}
// disable tableview animate the activity indicator
func disactivateScreen() {
self.tableView.tableHeaderView?.frame = tableView.frame
self.tableView.tableHeaderView = self.tableView.tableHeaderView // necessary to really set the frame
activityIndicator.startAnimating()
}
享受!