我目前正在通过评估 prepareForSegue
TRONG segue.identifier
动态加载新 View :
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString: @"DetailViewSegue"]) {
DetailViewController *detailController = segue.destinationViewController;
// ... do something with the controller
}
}
其中一些 View 需要一些时间,因为从 Internet 收集数据并将其显示在表格方案中需要相当长的时间。因此,我想显示一个进度 HUD,如 KVNProgress
,但现在的主要问题是进度条显示得太晚,就在新 View 准备就绪之前。据我所知,主要问题是 prepareForSegue
方法,因此 KVNProgress
在加载所有数据之前立即被调用,但加载新 View 似乎是首选。
我尝试的另一件事是在 IBAction
hoặc didSelectRowAtIndexPath
gọi vào KVNProgress
并在其中调用 performSegueWithIdentifier
他自己的线程。然而,这是(正如控制台输出所暗示的)不鼓励的,并且也没有真正起作用。
Cảm ơn!
编辑:有多次尝试实现这一目标,目前我正在尝试这样做:
(IBAction)buttonPushed:(id)sender {
[KVNProgress showWithStatus:@"Loading"];
[self performSegueWithIdentifier:@"DetailViewSegue" sender:sender];
}
正如我所描述的,我认为这是我最早可以在加载新操作之前显示 ProgressHUD。然而,当前 View 似乎在加载新 View 时被阻止,因此未显示 hud。
有两种解决方案。
当用户点击“加载数据”按钮时,
- 您显示 HUD(并停留在当前屏幕上)
- 从互联网加载数据(通常在后台线程上)
- 完成后,您调用
performSegueWithIdentifier
以移动到 DetailView 屏幕
或者,您可能更愿意这样做:
- 当用户点击按钮
- 您移动到新的 DetailView 屏幕
- 在 DetailViewController.m 中,显示 HUD 并调用加载互联网数据的后台线程
两者各有利弊(您可能会发现后者更易于维护,因为其他屏幕调用此 DetailView
屏幕并且还需要加载互联网数据来填充此屏幕)。
关键是决定你想用哪种方式来实现它,然后让那个特定的 ViewController 来完成这两个部分,处理 HUD Và加载互联网数据。
Tôi là một lập trình viên xuất sắc, rất giỏi!