进度 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
在加载所有数据之前立即被调用,但加载新视图似乎更可取。
我尝试的另一件事是在 IBAction
或 didSelectRowAtIndexPath
中调用 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并 加载互联网数据。
我目前正在通过评估 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
在加载所有数据之前立即被调用,但加载新视图似乎更可取。
我尝试的另一件事是在 IBAction
或 didSelectRowAtIndexPath
中调用 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并 加载互联网数据。