You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Objective-C中如何在第二个ViewController用活动指示器等待数据加载完成

在第二个ViewController中使用活动指示器的实现方案

嘿,我来帮你搞定这个问题!要在RecievVC里用活动指示器确保数据完全加载完成后再执行后续操作,咱们可以按以下步骤来实现:

步骤1:给RecievVC添加活动指示器属性

首先在RecievVC的实现文件里,声明活动指示器的属性,方便后续控制:

@interface RecievVC ()
@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator;
@end

步骤2:配置并启动活动指示器

在RecievVC的viewDidLoad方法里,初始化并配置活动指示器,把它加到视图上,同时开始动画:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 初始化活动指示器,用白色大样式(你可以根据需求改样式)
    self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    self.activityIndicator.center = self.view.center;
    self.activityIndicator.color = [UIColor darkGrayColor]; // 设置指示器颜色
    [self.view addSubview:self.activityIndicator];
    
    // 开始动画
    [self.activityIndicator startAnimating];
    
    // 调用数据加载/处理方法
    [self processLoadedData];
}

步骤3:处理数据并在完成后停止指示器

接下来实现数据处理的方法,如果你的数据处理是异步操作(比如网络请求、本地大文件解析),一定要在操作完成的回调里停止指示器;如果是同步耗时操作,建议放到后台线程执行,避免阻塞UI:

- (void)processLoadedData {
    // 模拟异步数据处理(比如网络请求、解析字典里的大量数据)
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 这里处理你的数据:比如解析self.dicData里的大量内容
        // ........你的数据处理逻辑........
        
        // 数据处理完成后,回到主线程更新UI
        dispatch_async(dispatch_get_main_queue(), ^{
            // 停止活动指示器并隐藏
            [self.activityIndicator stopAnimating];
            self.activityIndicator.hidden = YES;
            
            // 这里执行数据加载完成后的后续操作:比如更新UI、展示内容
            [self updateUIWithLoadedData];
        });
    });
}

// 数据加载完成后更新UI的示例方法
- (void)updateUIWithLoadedData {
    // 比如根据self.dicData里的内容更新标签、表格等
    NSString *name = self.dicData[@"lblname"];
    // 假设你有一个UILabel叫displayLabel
    self.displayLabel.text = name;
    // 其他UI更新逻辑...
}

补充说明

  • 如果你是从第一个VC传递的dicData本身就需要耗时处理,一定要把处理逻辑放到后台线程,避免卡住UI
  • 活动指示器的样式可以根据你的APP风格调整,比如UIActivityIndicatorViewStyleMedium或者自定义颜色
  • 记得在viewWillDisappear里停止指示器,避免内存泄漏:
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    if ([self.activityIndicator isAnimating]) {
        [self.activityIndicator stopAnimating];
    }
}

这样就能确保只有当数据完全加载处理完成后,才会停止指示器并执行后续的UI操作啦!

内容的提问来源于stack exchange,提问作者Musaad Alruwaili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:58:38