进展HUD显示为时已晚

时间:2015-08-06 15:35:05

标签: ios objective-c preloader

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

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

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

我尝试的另一件事是在KVNProgressIBAction内拨打didSelectRowAtIndexPath并在自己的主题中调用performSegueWithIdentifier。然而,这是(因为控制台输出建议)气馁,并且也不起作用。

谢谢!

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

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

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

正如我所描述的,我认为这是我可以在加载新动作之前显示ProgressHUD的最早版本。但是,当加载新视图时,当前视图似乎被阻止,因此不会显示hud。

1 个答案:

答案 0 :(得分:1)

有两种解决方案。

当用户点击“加载数据”按钮时,

  • 显示HUD(并保持在当前屏幕上)
  • 从互联网加载数据(通常在后台线程上)
  • 完成后,调用performSegueWithIdentifier移至DetailView屏幕

或者,您可能更喜欢这样做:

  • 用户点击后立即拨打performSegueWithIdentifier 按钮
  • 您转到新的DetailView屏幕
  • 在DetailViewController.m中的
  • ,显示HUD并调用 后台线程加载互联网数据

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

关键是要决定实现这个的方式,然后让特定的 ViewController执行这两个部分,处理HUD 加载互联网数据。< / p>