进度 HUD 显示太迟

Progress HUD showing too late

我目前正在通过评估 prepareForSegue 中的 segue.identifier 来动态加载新视图:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString: @"DetailViewSegue"]) {
        DetailViewController *detailController = segue.destinationViewController;
        // ... do something with the controller
    }
}

其中一些视图需要一些时间,因为从 Internet 收集数据并将其显示在 table 方案中需要相当长的时间。 因此,我想显示一个像 KVNProgress 这样的进度 HUD,但是现在的主要问题是进度条显示得太晚,就在新视图准备就绪之前。据我所知,主要问题是 prepareForSegue 方法,因此 KVNProgress 在加载所有数据之前立即被调用,但加载新视图似乎更可取。

我尝试的另一件事是在 IBActiondidSelectRowAtIndexPath 中调用 KVNProgress 并在他自己的线程中调用 performSegueWithIdentifier。然而,这是(正如控制台输出所暗示的)不鼓励的,并且也没有真正起作用。

谢谢!

编辑: 有多次尝试实现这一目标,目前我正在尝试这样做:

(IBAction)buttonPushed:(id)sender {
    [KVNProgress showWithStatus:@"Loading"];

    [self performSegueWithIdentifier:@"DetailViewSegue" sender:sender];
}

正如我所描述的,我认为这是我最早可以在加载新操作之前显示 ProgressHUD。然而,当前视图似乎在加载新视图时被阻止,因此未显示 hud。

有两种解决方案。

当用户点击 "Load data" 按钮时,

  • 您显示 HUD(并停留在当前屏幕)
  • 从 Internet 加载数据(通常在后台线程上)
  • 完成后,您调用 performSegueWithIdentifier 移动到 DetailView 屏幕

或者,您可能更愿意这样做:

  • 只要用户点击,你就会调用 performSegueWithIdentifier 按钮
  • 您移动到新的 DetailView 屏幕
  • 在 DetailViewController.m 中,您显示 HUD 并调用 加载互联网数据的后台线程

两者各有利弊(您可能会发现后者更易于维护,因为其他屏幕调用此 DetailView 屏幕并且还需要加载互联网数据来填充此屏幕)。

关键是决定你想用哪种方式来实现它,然后那个特定的ViewController来做这两部分,处理HUD 加载互联网数据。