Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在所有实例中更改自定义UINavigationController属性_Ios_Swift_Uinavigationcontroller - Fatal编程技术网

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

Ios 在所有实例中更改自定义UINavigationController属性,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,我正在尝试创建一个选项,用户可以在其中定义navigationBar背景色。(我在这里提出了一个简单的问题) 我正在将名为CustomNavigationController:UINavigationController的自定义UINavigationController用于以下实现: class CustomNavigationController: UINavigationController { override func viewDidLoad() { super.viewDi

我正在尝试创建一个选项,用户可以在其中定义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被嵌入到几个viewcontroller中

因此,默认情况下,自定义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的颜色

我的问题是:如何更改所有CustomNavigationController实例的颜色以保持整个应用程序中所有实例的颜色都已更改

谢谢

你可以试试这个

UINavigationBar.appearance().barTintColor = UIColor.orange
UINavigationBar.appearance().tintColor = UIColor.white
为了更改所有视图控制器的导航栏颜色

您可以在应用程序中设置所有
UINavigationBar

UINavigationBar.appearance()
设置所有属性

在您的情况下,您可以访问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
    }

}