首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时更改UITabBar.appearance().tintColor

在运行时更改UITabBar.appearance().tintColor
EN

Stack Overflow用户
提问于 2021-10-29 09:40:41
回答 2查看 60关注 0票数 0

我想让用户改变整个应用程序的颜色。但是每当我选择一种颜色时,它只会在应用程序重启后才会改变。

是否有在运行时更改颜色的选项?

我已经使用如下函数设置了一个Button来创建一个ColorPicker

代码语言:javascript
复制
@IBAction func colorChange(_ sender: UIButton) {
        // Initializing Color Picker
        let picker = UIColorPickerViewController()

        // Setting the Initial Color of the Picker
        picker.selectedColor = UIColor(named: "MyGreen")!

        // Setting Delegate
        picker.delegate = self

        // Presenting the Color Picker
        self.present(picker, animated: true, completion: nil)
    }

当用户选择一种颜色时,我会在此函数中进行更改

代码语言:javascript
复制
func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
        defaults.set(viewController.selectedColor, forKey: "myColor")
        UITabBar.appearance().tintColor = viewController.selectedColor
    }

为了在启动时更改颜色,我在AppDelegate中实现了这一点

代码语言:javascript
复制
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        var myColor = defaults.color(forKey: "myColor")
        if  myColor == nil {
            myColor = UIColor(named: "MyGreen")
        }
        UITabBar.appearance().tintColor = myColor
        
        return true
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-01 17:26:36

有人给了我一篇文章,让我看看如何做到这一点。https://zamzam.io/protocol-oriented-themes-for-ios-apps/

我最终是这样做的:

代码语言:javascript
复制
 func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
        defaults.set(viewController.selectedColor, forKey: "myColor")
        apply(for: UIApplication.shared, color: viewController.selectedColor)
    }

通过添加此函数

代码语言:javascript
复制
func apply(for application: UIApplication, color: UIColor) {
        UITabBar.appearance().tintColor = color
        application.windows.reload()
    }

和这些扩展

代码语言:javascript
复制
public extension UIWindow {

    /// Unload all views and add back.
    /// Useful for applying `UIAppearance` changes to existing views.
    func reload() {
        subviews.forEach { view in
            view.removeFromSuperview()
            addSubview(view)
        }
    }
}

public extension Array where Element == UIWindow {
    
    /// Unload all views for each `UIWindow` and add back.
    /// Useful for applying `UIAppearance` changes to existing views.
    func reload() {
        forEach { $0.reload() }
    }
}

我不知道它是好是坏--但它对我很有效。

票数 0
EN

Stack Overflow用户

发布于 2021-10-29 10:34:04

你试过使用UITabBar.appearance().barTintColor吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69766725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档