如何在解除其顶部的视图控制器后处理初始视图控制器

Posted

技术标签:

【中文标题】如何在解除其顶部的视图控制器后处理初始视图控制器【英文标题】:How to handle the initial UIViewController after dissmissing the one on top of it 【发布时间】:2013-04-12 17:17:43 【问题描述】:

大家好

如果我使用了不正确的术语,请先原谅我。我在使用 viewController 时遇到问题。我有一个通过 navigationController 访问的 viewController(触发的 segues:rootViewcontroller->firstviewcontroller)

现在我在 firstviewcontroller 上,它调用“viewdidLoad”,如果用户没有登录,它会对 loginViewController 执行模态 segue。

处理完此视图的登录问题后,我执行

         [self.presentingViewController dismissViewControllerAnimated:NO completion:nil];

它会关闭 logincontroller 并毫无问题地将我带回 firstviewController。

现在我的问题是,这个解除操作 - 毫无疑问 - 不会再次调用“viewDidLoad”(这样我就可以检查用户是否已登录)。我想知道我是否可以在关闭第二个视图控制器后自动调用我的第一个视图控制器的任何部分,以便我可以自动检查登录状态并相应地执行操作。

非常感谢

阿尔达

【问题讨论】:

不相关的注释:当我发布此内容时,我的“大家好”短语被剪掉了。我添加了一个随机字母(m)。我们不能在这里打招呼吗? 【参考方案1】:

您可以覆盖 firstViewController 中的-viewWillAppear: 方法。它会在你关闭登录控制器后被调用。

另一种方法是让您的 firstViewController 成为登录控制器的委托。完成登录过程后,您可以调用委托来关闭呈现的视图控制器并更新子视图

【讨论】:

-viewDidLoad 不会再次调用,因为视图控制器的视图在显示模式视图控制器时不会被卸载,因此无需再次加载视图。不过,在 ios6 之前的环境中有一个例外。当应用收到内存警告时,它会卸载未呈现的控制器的视图,因此在这种情况下,当当前模式视图控制器被关闭时,-viewDidLoad 将被调用。 您先生成就了我的一天!我知道这很容易,我什至为此阅读了文档,直到现在我才意识到。估计要睡觉了非常感谢

以上是关于如何在解除其顶部的视图控制器后处理初始视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

为啥在模态视图控制器被解除后 CAGradientLayer 从视图中删除

如何在解除第二个控制器后调用第一个控制器中的函数

将所有 UIAlertView 对象作为全局对象访问以对其进行通用控制(在解除分配视图控制器后解决警报中的 CRASH)

iOS - 在其顶部呈现模式后保留视图控制器状态

在模态视图被解除后,父视图控制器中是不是有一个委托被调用?

当模态视图控制器被解除时如何调用函数