代码之家  ›  专栏  ›  技术社区  ›  Vinícius Barcelos

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

  •  1
  • Vinícius Barcelos  · 技术社区  · 7 年前

    我正在尝试使用户可以定义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中。

    UIViewControllers with UINavigationControllers embed

    因此,默认情况下,自定义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 回复  |  直到 7 年前
        1
  •  1
  •   pkorosec    7 年前

    在您的情况下,您可以访问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
        }
    
    }
    
        2
  •  1
  •   AshvinGudaliya    7 年前

    你可以试试这个

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

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

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