首页 > 解决方案 > ViewWillAppear 未在标签栏项目视图控制器中调用

问题描述

我有结构:

*- TabBarViewController (根)

*-- 导航视图控制器

*---- ChatViewController

*-- 导航视图控制器

*---- 菜单视图控制器

当我切换标签栏项目时,(Chat, Menu) 中的 viewWillAppear 只调用一次,但在 NavigationVC 中每次我切换时都会调用。

切换项目时是否可以在 Chat 和 Menu ViewControllers 中自动调用 viewWillAppeare?

super.viewWillAppear 是内部方法。

我的代码看起来像:

class TabBarController: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()
    let v1 = storyboard!.instantiateViewController(withIdentifier: "ChatViewController")
    let v2 = storyboard!.instantiateViewController(withIdentifier: "MenuViewController")
    viewControllers = [v1,v2]

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

class ChatViewController: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print(self,#function)
    }
}

class MenuViewController: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print(self,#function)
    }
}

它适用于明确的新项目,但适用于旧项目(我工作的地方,我有很多功能,不起作用)

StoryboardId 链接到 NavigationViewController 中Storyboard

标签: iosswiftuinavigationcontrolleruitabbarcontrolleruitabbar

解决方案


我发现问题:在extension UINavigationController我有方法

    open override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if !UserDefaults.standard.isUserPresented {
            navigationBar.barTintColor = .rgbColor(red: 43, green: 43, blue: 43, alpha: 1)
        } else {
            navigationBar.barTintColor = .rgbColor(red: 100, green: 100, blue: 100, alpha: 1)
        }
    }

并且此块 viewWillAppear 在 NavigationBar 的子视图控制器中


推荐阅读