在所有实例中更改自定义UINavigationController属性

时间:2017-12-14 10:26:25

标签: ios swift uinavigationcontroller

我正在尝试创建一个用户可以定义navigationBar背景颜色的选项。 (我在这里提出了一个简单的版本)

我正在使用一个名为CustomNavigationController的自定义UINavigationController:UINavigationController与此实现:

class CustomNavigationController: UINavigationController {

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewWillLayoutSubviews() {
    self.navigationBar.barTintColor = .orange
    self.navigationBar.isTranslucent = false
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
}

这个自定义UINavigationController嵌入在几个ViewControllers中。

UIViewControllers with UINavigationControllers embed

因此,默认情况下,Custom NavigationController的navigationBar为橙色。

class SecondViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func redButtonPressed(_ sender: Any) {

    let navController = navigationController as! CustomNavigationController
    navController.navigationBar.barTintColor = .red
}

@IBAction func orangeButtonPressed(_ sender: Any) {

    let navController = navigationController as! CustomNavigationController
    navController.navigationBar.barTintColor = .orange
}
}

第二个视图控制器可以编辑其嵌入的navigationController的颜色。

我的问题是:如何更改所有CustomNavigationControllers实例的颜色以保持应用程序中所有颜色的颜色变化?

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以试试这个

UINavigationBar.appearance().barTintColor = UIColor.orange
UINavigationBar.appearance().tintColor = UIColor.white

为了更改所有视图控制器的导航栏颜色

您可以在应用中使用所有UINavigationBar UINavigationBar.appearance()设置所有属性。 more

答案 1 :(得分:1)

在您的情况下,您可以像这样访问CustomNavigationController的所有实例:

tabBarController?.viewControllers?.forEach { controller in
    if let controller = controller as? CustomNavigationController {
        controller.customBarTintColor = .red
    }
}

同样将CustomNavigationController实现更改为如下所示,否则在每次布局调用时颜色将重置为橙色。

class CustomNavigationController: UINavigationController {

    var customBarTintColor: UIColor = .orange {
        didSet {
            navigationBar.barTintColor = customBarTintColor
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationBar.barTintColor = customBarTintColor
        navigationBar.isTranslucent = false
    }

}