【问题标题】:viewDidDisappear never get called in customized tabviewDidDisappear 永远不会在自定义选项卡中被调用
【发布时间】:2015-09-16 01:57:24
【问题描述】:

我正在使用下拉菜单,想要实现与标签栏相同的行为。比如我想随时切换vc1,vc2,vc3,保留原始数据。我所做的是使用 willMoveToParentViewController。

   func didSelectItem(indexPath: Int){
    // Initialize View controllers
    switch(indexPath){
    case 1:
        self.removeFromParentViewController()
        vc1.title = "Learning Stories"
        self.addChildViewController(vc1)
        self.view.addSubview(vc1.view)
          vc1.willMoveToParentViewController(self)

    case 2:
        self.removeFromParentViewController()
        vc2.title = "Group Stories"
        self.addChildViewController(vc2)
        self.view.addSubview(vc2.view)
        vc2.willMoveToParentViewController(self)


    default:
        self.removeFromParentViewController()
        self.addChildViewController(vc3)
        self.view.addSubview(vc3.view)
        vc3.willMoveToParentViewController(self)
    }
}

但是在 vc2 和 vc3 中,viewDidappear 只被调用一次,并且 viewDIdappear 永远不会被调用。我知道它应该只适用于 pop、present 等,但是标签栏是怎么做的呢?在切换每个视图控制器时保留数据。

【问题讨论】:

    标签: ios swift uiviewcontroller


    【解决方案1】:

    您通过添加视图/vc 来绕过视图生命周期的东西,因为它们实际上并没有消失,当您切换到另一个看起来像的视图控制器时,您永远不会删除其他 2 个视图控制器。所以从技术上讲,它们都被添加到同一个视图中,但是每次您调用addSubview 时,您只是将视图放在其他视图之上。即使它们不可见,它们实际上也没有去任何地方,这就是为什么它不调用viewDidDisappear

    【讨论】:

    • 如何让它像标签栏一样,交换每个vc并保留数据。好像按我的方式做会消耗更多的内存?
    • 在您的每种情况下,您都需要一些代码来确保其他 2 个 vc 已被删除,只需尝试一下
    • 我发现的都是关于标签栏控制器和导航控制器的。我需要的是与 tabbar 相同的东西。 A -> B,或 A->C,C->A 等,并保留数据。如果我删除其他2vc,我如何保留数据?
    • 拥有某种对象来存储与视图控制器不相交的数据,因此当视图控制器重新出现时,您可以将数据填充回来。这是标准的 MVC 东西
    猜你喜欢
    • 2011-08-19
    • 2012-04-18
    • 2012-08-03
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多