Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIActivityIndicatorView不显示_Ios_Objective C_Uiactivityindicatorview - Fatal编程技术网

Ios UIActivityIndicatorView不显示

Ios UIActivityIndicatorView不显示,ios,objective-c,uiactivityindicatorview,Ios,Objective C,Uiactivityindicatorview,我有一个带有表视图控制器的应用程序,其中用户选择一个美国州,调用一个web服务,并在目标表视图控制器中显示该州的数据。由于web服务可能需要一些时间才能完成,因此我需要一个活动指示器。由于没有临时数据显示,我需要同步处理。所以我的任务非常简单:启动活动指示器,调用web服务,完成后停止活动指示器 我显然做错了什么,没有任何活动指示器显示出来 以下是我的目标表视图控制器的ViewDidDisplay方法的代码: -(void)viewDidAppear:(BOOL)animated{ [s

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

我显然做错了什么,没有任何活动指示器显示出来

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

-(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];
}
标题:

@property (strong, nonatomic) UIActivityIndicatorView *spinner;
GaugeList是进行web服务调用的对象


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

尝试使用
self.spinner
而不是使用
spinner

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

-(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服务发送请求。这是个坏习惯。我建议如下:

-(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];
        });
    });
}

首先,您应该在一些视图中添加活动指示器来显示它。但您不能将其添加到UITableView,因为UITableView是UIScrollView的子类,您将看到浮动活动指示器。在您的情况下,最好的方法是将活动指示器添加到导航栏等。或者,如果您想禁用表视图,您应该编写如下内容:

- (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];
}

您是否添加了子视图微调器?因此,我将使用类似的方法向活动指示器添加一些文本?谢谢是的,不要忘记在-viewDidLoad方法中初始化视图层次结构,这是最佳实践。不要使用-viewwilldisease用于此目的。