UITableView活动指标Apple方式

时间:2012-03-20 13:54:38

标签: ios objective-c uitableview uiactivityindicatorview

我的问题很常见。我想显示一些“加载”内容,同时下载将在表中显示的数据。但是我到目前为止看到的所有解决方案都是向细胞添加一些微调器,或者在应用程序上放置一些半透明视图。

我想要活跃的是苹果在其应用中所做的事情(例如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

2 个答案:

答案 0 :(得分:10)

  1. 创建UIViewController(而不是UITableViewController - 即使您要提交表格也是如此)
  2. 创建“加载”视图并将其添加为插座
  3. 创建您的tableview并将其添加为插座
  4. 当控制器出现时,将其视图属性设置为指向“正在加载”视图。完成所有任务后,使用tableview
  5. 切换视图

    请不要忘记添加协议和方法以控制您的tableview

    我希望这会对你有所帮助

答案 1 :(得分:2)

另一个答案是在UITableViewController中显示一个活动指示器,而不将其更改为UIViewController。

  1. 在故事板中,在表格视图中添加活动指示符(但不在TableViewCell上方!)。它将位于表视图标题内(不是节标题!)

  2. 将活动指示器的插座连接到您的班级文件

    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    
  3. 使用这些功能显示或隐藏活动指示器

    // 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()
    }
    
  4. 享受!