关闭关闭子视图控制器后调用 viewdidload

Posted

技术标签:

【中文标题】关闭关闭子视图控制器后调用 viewdidload【英文标题】:viewdidload called after closing dismissing child viewcontroller 【发布时间】:2015-08-04 13:22:23 【问题描述】:

我有一个主视图控制器和一个子视图控制器。

我意识到在关闭 Childviewcontroller 时像:

        self.dismissViewControllerAnimated(true, completion: 
            self.dismissViewControllerAnimated(true, completion: nil);
        );

它只会关闭子视图控制器,我可以看到主视图控制器。不处理其他代码

如果我关闭子视图控制器并通知主视图控制器:

                self.dismissViewControllerAnimated(true, completion: 
                    NSNotificationCenter.defaultCenter().postNotificationName("refreshtextviewer_with_bookmark", object: nil);
                    self.dismissViewControllerAnimated(true, completion: nil);

                );

然后我的 refreshtextviewer_with_bookmark() 函数在主视图控制器中被调用,同时标准 viewDidLoad() 也被调用。

这是正常行为吗,在这种情况下 viewDidLoad() 在关闭子 viewcontroller 后被调用?有没有办法防止这种情况发生?

【问题讨论】:

哪个viewDidLoad,父母还是孩子? refreshtextviewer_with_bookmark 的监听器有什么代码? viewDidLoad 被主视图控制器调用。为了简化这个例子,我只有一个 println("test") 。 【参考方案1】:

不应在解雇后调用。经过测试,确实没有调用。

这是一个简单的例子:

家长

类视图控制器:UIViewController 覆盖 func viewDidLoad() super.viewDidLoad() println(__FUNCTION__) NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshtextviewer_with_bookmark", name: "refreshtextviewer_with_bookmark", object: nil) 初始化 NSNotificationCenter.defaultCenter().removeObserver(self) @IBAction func buttonTap(sender: AnyObject) 让 vc = self.storyboard?.instantiateViewControllerWithIdentifier("childVC") as!子视图控制器 self.presentViewController(vc,动画:真,完成:无) func refreshtextviewer_with_bookmark() println(__FUNCTION__)

孩子

类 ChildViewController: UIViewController @IBAction func exitTap(sender: AnyObject) self.dismissViewControllerAnimated(true, completion: () -> Void in NSNotificationCenter.defaultCenter().postNotificationName("refreshtextviewer_with_bookmark", object: nil) )

FYI __FUNCTION__ 宏被替换为函数名。

【讨论】:

非常感谢您的测试。但在我的情况下确实如此。任何千分之一。似乎在解雇孩子后启动了一个新的主视图控制器。我通过在 viewDidLoad 之后将 Main 中的变量(默认为 false)设置为 true 来测试这一点。在解雇孩子并再次处理 viewDidLoad 后,变量再次为假。 你在导航视图控制器中推送它吗?请发布您如何从父母那里调用孩子。 我刚刚发现。我的通知很混乱。我在调用相同子视图控制器的 2 个主视图控制器中有 2 个同名通知。我对它们进行了独特的重命名,现在它可以工作了。非常感谢 。我会接受,因为问题和你的答案都是正确的。

以上是关于关闭关闭子视图控制器后调用 viewdidload的主要内容,如果未能解决你的问题,请参考以下文章

子视图控制器关闭后重新加载根视图控制器

关闭模态视图控制器后在根视图控制器中执行操作

在 iOS 上关闭视图控制器后如何继续播放音频?

如何在不调用 [关闭] 的情况下将整数从控制器设置到子视图

无法在 viewDidLoad 中调用函数 [关闭]

关闭呈现的 VC 时呈现视图控制器会丢失子视图