Iphone 使用等待对话框并导航到另一个ViewController

Iphone 使用等待对话框并导航到另一个ViewController,iphone,objective-c,ios,Iphone,Objective C,Ios,我正在尝试使用应用程序中的等待对话框 我的应用程序中有一个按钮。当用户单击它时,我们导航到另一个viewController: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerW

我正在尝试使用应用程序中的等待对话框

我的应用程序中有一个按钮。当用户单击它时,我们导航到另一个viewController:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"];
[self.navigationController pushViewController:yourViewController animated:YES];
正如您所知,它也可以从
界面生成器
中设置

问题是,在加载下一页之前需要一段时间,我想在此期间显示一个等待对话框:

- (IBAction)navigation:(id)sender {
    [MBProgressHUD showHUDAddedTo:self.view animated:YES];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"];
    [self.navigationController pushViewController:yourViewController animated:YES];
}
但它不起作用

当我删除与导航相关的代码并仅使用此代码时:

[MBProgressHUD showHUDAddedTo:self.view animated:YES];
等待对话框将显示,但当我使用导航代码和此行时,等待对话框将不显示,导航将正常工作

我怎样才能让他们一起工作

只想添加它来隐藏等待对话框,我还有:

- (void) viewDidDisappear:(BOOL)animated {
    [MBProgressHUD hideHUDForView:self.view animated:YES];
}

我认为问题出在您的
-(iAction)导航:(id)发送方{}
因为您首先显示
MBProgressHUD
,然后按下
ViewController2
。因此,
MBProgressHUD
已经显示出来,但随着它的出现,它也将进入新的视图

如果要显示等待标志,则可以使用带计时器的
MBProgressHUD
。将计时器设置为1.0或2.0秒。然后调用
导航
方法。使计时器失效并卸下
MBProgressHUD

或者,你可以使用

[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(yourMethod)名称:@“notificationName”对象:nil]

在“-(iAction)导航中:(id)发送方{}

并从另一个视图调用此
NSNotification
,如
[[NSNotificationCenter defaultCenter]postNotificationName:@“notificationName”对象:nil];

`我认为问题出在您的
-(iAction)导航:(id)发送方{}
因为您首先显示
MBProgressHUD
,然后按下
ViewController2
。因此,
MBProgressHUD
已经显示出来,但随着它的出现,它也将进入新的视图

如果要显示等待标志,则可以使用带计时器的
MBProgressHUD
。将计时器设置为1.0或2.0秒。然后调用
导航
方法。使计时器失效并卸下
MBProgressHUD

或者,你可以使用

[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(yourMethod)名称:@“notificationName”对象:nil]

在“-(iAction)导航中:(id)发送方{}

并从另一个视图调用此
NSNotification
,如
[[NSNotificationCenter defaultCenter]postNotificationName:@“notificationName”对象:nil];
`而不是

- (IBAction)navigation:(id)sender {
    [MBProgressHUD showHUDAddedTo:self.view animated:YES];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"];
    [self.navigationController pushViewController:yourViewController animated:YES];
}
试试看

或者,您需要在
ViewController2
视图中添加
showHUDAddedTo
方法。

而不是

- (IBAction)navigation:(id)sender {
    [MBProgressHUD showHUDAddedTo:self.view animated:YES];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ViewController2 *yourViewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"FavoritePage"];
    [self.navigationController pushViewController:yourViewController animated:YES];
}
试试看


或者,您需要在
ViewController2
视图中添加
showhuddedto
方法。

是的,这是可能的,但当我单击按钮时,需要几秒钟才能导航到其他页面。(因为它开始从云读取数据)。所以我看到的是几秒钟内的第一页。我想在那里添加ProgressHUD。当第二个页面加载时,不需要显示等待对话框。有没有办法在iPhone中使用某种异步任务?(这在Android中是可能的)在这种情况下,你需要将它添加到self.navigationController.view而不是你的viewcontroller.view,我想。谢谢你的观点。这是有用的。我认为这是您的正确答案:self.navigationController.views是的,这是可能的,但当我单击按钮时,需要几秒钟才能导航到其他页面。(因为它开始从云读取数据)。所以我看到的是几秒钟内的第一页。我想在那里添加ProgressHUD。当第二个页面加载时,不需要显示等待对话框。有没有办法在iPhone中使用某种异步任务?(这在Android中是可能的)在这种情况下,你需要将它添加到self.navigationController.view而不是你的viewcontroller.view,我想。谢谢你的观点。这是有用的。我认为这是您的正确答案:self.navigationController.view您关于调用计时器的建议不太好。我不打算让应用程序更耗时。您关于使用
NSNotification
的建议很好。但问题是我用的是故事板。我无法使通知以我想要的方式工作。你实施过这样的事情吗?还是仅仅是猜测?如果你有经验,请分享更多的代码。(只想补充一点,我知道如何使用通知,但我们如何使它与ProgressDialog一起工作?@Ali我没有在故事板中使用
NSNotification
。)。。。。但正如您所说的定时器,我认为它不会耗费时间或加载应用程序。它创建自己的线程,并单独操作。完成后,使计时器失效。因此,在我看来,您至少可以尝试一下
NSTimer scheduleTimer…..
。:)顺便说一句,谢谢您与我分享您的想法+1分。你关于呼叫计时器的建议不好。我不打算让应用程序更耗时。您关于使用
NSNotification
的建议很好。但问题是我用的是故事板。我无法使通知以我想要的方式工作。你实施过这样的事情吗?还是仅仅是猜测?如果你有经验,请分享更多的代码。(只想补充一点,我知道如何使用通知,但我们如何使它与ProgressDialog一起工作?@Ali我没有在故事板中使用
NSNotification
。)。。。。但正如您所说的定时器,我认为它不会耗费时间或加载应用程序。它创建自己的线程,并单独操作。完成后,使计时器失效。因此,在我看来,您至少可以尝试一下
NSTimer scheduleTimer…..
。:)顺便说一句,谢谢您与我分享您的想法+1分。