1

当我尝试推送视图控制器时,MPProgressView 不会显示,直到显示推送的 VC 前几秒钟。viewController 是否应该放在与显示 MBProgressView 相同的功能中?我已经确保我的 MBProgressView 在主线程上,我在 SO 上尝试了许多解决方案,但看不到任何有同样问题的人。我只是想在加载和推送 viewController 时显示 MBProgressHUD。谢谢!

我正在使用 MBProgressView 如下:

- (IBAction)pushButton:(id)sender
{

    self.HUD =[MBProgressHUD showHUDAddedTo:self.view animated:YES];
    [self.view addSubview:self.HUD];
    self.HUD.labelText = @"Doing stuff...";
    self.HUD.detailsLabelText = @"Just relax";
    self.HUD.delegate=self;

      [self.view addSubview:self.HUD];
   [self.HUD showWhileExecuting:@selector(loadCreate) onTarget:self withObject:nil animated:YES];



}


- (void)loadCreate {

  [self performSelectorOnMainThread:@selector(dataLoadMethodMail) withObject:nil waitUntilDone:YES];
}


-(void)dataLoadMethodMail
{NSLog(@"data load method is displaying");


   SelectViewController *mvc = [[SelectViewController alloc] init];
   [self.navigationController pushViewController:mvc animated:YES];


}
4

1 回答 1

2

您无需将 self.HUD 添加到 self.view,showHUDAddedTo: 为您完成。

[self.HUD showWhileExecuting:@selector(loadCreate) onTarget:self withObject:nil animated:YES];

显示 hud 直到loadCreate返回。

[self performSelectorOnMainThread:@selector(dataLoadMethodMail) withObject:nil waitUntilDone:YES];

在主线程上调度某些东西并在之后(在 dataLoadMethodMail 实际结束之前)返回。HUD 显示但立即消失。

要解决此问题,请尝试在dataLoadMethodMail完成工作后手动隐藏 HUD。

只需更换

 [self.HUD showWhileExecuting:@selector(loadCreate) onTarget:self withObject:nil animated:YES];

[self loadCreate];

并添加

dispatch_async(dispatch_get_main_queue(), ^{
    [self.HUD hide:YES];
});

在......的最后dataLoadMethodMail

PS:加载数据不应该在主线程上完成。

于 2013-08-14T08:35:44.653 回答