【问题标题】:MBProgressHUD and Storyboard instantiate new view controllerMBProgressHUD 和 Storyboard 实例化新的视图控制器
【发布时间】:2013-04-16 14:05:46
【问题描述】:

我正在使用带有情节提要设置的MBRProgressHUD

我展示了一个处理登录的登录视图控制器。收到用户后,我会呈现另一个视图控制器,如下所示:

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"];

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

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

【问题讨论】:

    标签: ios uiview uistoryboard uistoryboardsegue mbprogresshud


    【解决方案1】:

    HUD 不应丢失。如果持有引用的控制器被释放,你只会丢失对它的引用。

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

    传递参考:

    self.topViewController.hud = hud;
    

    【讨论】:

    • 正确,我猜是这样。但是,如何根据问题中的信息获得指向视图堆栈上的主视图控制器的指针?或者到首先加载并始终保留在堆栈中的初始视图控制器。问题已更新。
    • 实际上,您甚至不需要对 HUD 的引用。无论如何,所有 MBRProgressHUD 调用都是类方法。您可以简单地关闭 HUD 并放置一个新的而不保留对它的任何引用。
    • 你能解释一下你的意思/我应该做什么吗?
    • 查看“Usage”下的github.com/jdg/MBProgressHUD,了解如何关闭它。您不需要参考。
    • 我知道如何关闭它,问题是当新视图控制器被实例化时,显示 HUD 的旧视图控制器(视图)被移除,因此在我可以显示记录之前移除 HUD在带有复选标记的消息中
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多