首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIActivityIndicatorView不显示

UIActivityIndicatorView不显示
EN

Stack Overflow用户
提问于 2013-10-24 02:21:25
回答 3查看 14.9K关注 0票数 4

我有一个带有表视图控制器的应用程序,其中用户选择一个美国州,调用一个web服务,并在目标表视图控制器中显示该州的数据。由于web服务可能需要一些时间才能完成,因此我需要一个活动指示器。由于将没有临时数据显示,我需要这是同步处理。因此,我的任务非常简单:启动活动指示器,调用web服务,并在完成后停止活动指示器。

我显然做错了什么,并且没有显示任何活动指示器。

下面是我的目标表视图控制器的viewDidAppear方法的代码:

代码语言:javascript
复制
-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [self.tableView bringSubviewToFront:spinner];
    spinner.hidesWhenStopped = YES;
    spinner.hidden = NO;
    [spinner startAnimating];
    stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateIdentifier andType:nil];
    [self.tableView reloadData];
    [spinner stopAnimating];
}

标题:

代码语言:javascript
复制
@property (strong, nonatomic) UIActivityIndicatorView *spinner;

GaugeList是进行web服务调用的对象。

有人能告诉我如何显示活动指示器视图吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-24 02:29:45

您忘记在表视图上添加微调器。您的代码应如下所示:

代码语言:javascript
复制
-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    spiner.center = //set some center
    [self.tableView addSubview: spinner];
    [self.tableView bringSubviewToFront:spinner];
    spinner.hidesWhenStopped = YES;
    spinner.hidden = NO;
    [spinner startAnimating];
    stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateIdentifier andType:nil];
    [self.tableView reloadData];
    [spinner stopAnimating];
}

您还可以向主线程中的web服务发送请求。这是一种糟糕的做法。我建议如下所示:

代码语言:javascript
复制
-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    spiner.center = //set some center
    [self.tableView addSubview: spinner];
    [self.tableView bringSubviewToFront:spinner];
    spinner.hidesWhenStopped = YES;
    spinner.hidden = NO;
    [spinner startAnimating];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateIdentifier andType:nil];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
            [spinner stopAnimating];
        });
    });
}
票数 12
EN

Stack Overflow用户

发布于 2013-10-24 02:55:01

首先,您应该将活动指示器添加到某个视图中以显示它。但您不能将其添加到UITableView,因为UITableView是UIScrollView的子类,您将看到浮动的活动指示器。在你的例子中,最好的方法是在导航栏中添加活动指示器,等等。或者,如果你想禁用表格视图,你应该这样写:

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    UIView *dummyView = [[UIView alloc] init];
    dummyView.frame = self.tableView.bounds;
    dummyView.alpha = 0.5f;
    dummyView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    dummyView.userInteractionEnabled = YES;
    dummyView.backgroundColor = [UIColor blackColor];
    [dummyView addSubview:activityIndicator];
    activityIndicator.center = dummyView.center;
    [self.tableView addSubview:dummyView];
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-24 02:27:26

尝试使用self.spinner而不是spinner

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19549452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档