MBProgressHUD和Storyboard实例化新的视图控制器

时间:2013-04-16 14:05:46

标签: ios uiview uistoryboard uistoryboardsegue mbprogresshud

我正在使用MBRProgressHUD设置故事板。

我提供了一个处理登录的Login视图控制器。一旦收到用户,我就会出现另一个视图控制器:

self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeVC"];

在我的登录方法中,我使用以下内容创建我的HUD:

// Start the HUD outside the user login block
self.HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
self.HUD.dimBackground = NO;
self.HUD.labelText = NSLocalizedString(@"HUDLoggingInText", @"Login HUD Logging in text");

这一切都正常,我解决视图控制器的问题。在使用故事板之前,我能够添加以下内容:

// Bring down the HUD with a success message
self.HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]];
self.HUD.mode = MBProgressHUDModeCustomView;
self.HUD.labelText = NSLocalizedString(@"HUDLoggedInText", @"HUD Logged in text");
[self.HUD hide:YES afterDelay:2];

这会使HUD带有成功的复选标记和不同的文本。我现在的问题是,当使用登录视图控制器(及其所在的导航控制器)上方的第一行代码加载HomeVC时,我认为这意味着HUD也会丢失。

如何让HUD在instantiateViewControllerWithIdentifier之前显示成功?我已经尝试过在HomeVC加载之前显然移动HUD部分,但这没有任何区别,也没有将延迟更改为0。

修改 视图已加载。故事板加载的第一个视图是类InitialViewController。然后根据用户是否登录来实例化另一个控制器:

    self.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"WelcomeVC"];
} else {
    NSLog(@"logged in");
    self.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeVC"];

初始View控制器始终保留在堆栈上,并且是ECSlidingViewController,因此它具有topViewController的属性。

理想情况下,我需要知道如何将HUD添加到堆栈上的这个initialViewController,我想而不是当前显示的视图(Login View Controller),因为当登录完成并且新的视图控制器加载了'时,它被解除分配再次instantiateViewControllerWithIdentifier'。

1 个答案:

答案 0 :(得分:0)

HUD不应该丢失。如果取消分配包含引用的控制器,您就会丢失对它的引用。

解决方案:只需将对HUD的引用传递给您的主视图控制器。或者之前创建主视图控制器(不显示它)并在那里执行所有HUD逻辑。

传递参考:

self.topViewController.hud = hud;