70

我们如何通过代码更改iOS7/iOS8 上的全局 tint 颜色?我想更改使用此属性的多个对象,但不更改每个对象,这就是我想使用全局 tint 属性的原因。

4

7 回答 7

114

只需更改应用程序委托中的UIWindow' tintColor,它会默认自动传递给它的所有UIView后代。

[self.window setTintColor:[UIColor greenColor]];
于 2013-09-23T13:22:15.807 回答
68

[[UIView appearance] setTintColor:[UIColor greenColor]];

于 2013-10-02T15:24:14.397 回答
39

有两种方法可以更改全局色调颜色。如上所述,您可以更改self.window.tintColor.-application:didFinishLaunchingWithOptions:

在我看来,更优雅的方法是在 Storyboard 的File Inspector中设置Global Tint,而没有选择任何内容。这样你的更干净。-application:didFinishLaunchingWithOptions:

文件检查器中的全局色调

于 2015-08-08T06:43:40.947 回答
12

您可以通过设置窗口的 tint 属性为整个应用程序指定一种色调颜色。为此,您可以使用类似于以下的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.tintColor = [UIColor purpleColor];
    return YES;
}
于 2013-11-02T16:04:58.490 回答
4

为 Swift 2.2 更新

您可以从任何地方执行此操作,如下所示:

// Get app delegate
let sharedApp = UIApplication.sharedApplication()

// Set tint color
sharedApp.delegate?.window??.tintColor = UIColor.green()

或者,如果您尝试从 AppDelegate 执行此操作,

self.window?.tintColor = UIColor.green()
于 2016-08-17T16:35:28.883 回答
2

为 Swift 5 更新

在 App Delegate 中写入:

self.window?.tintColor = UIColor.green
于 2019-07-31T08:09:02.207 回答
-1

以下事情对我不起作用:

navigationItem.backBarButtonItem?.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR

navigationItem.backBarButtonItem?.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR], for: .normal)

self.navigationController?.navigationBar.barStyle = UIBarStyle.black

navigationController?.navigationBar.barTintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR

navigationController?.navigationBar.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor : Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR]

以下工作:

  1. 从故事板设置全局色调颜色。

或者

  1. 设置窗口的色调

对于整个应用程序:

let sharedApp = UIApplication.sharedApplication()
sharedApp.delegate?.window??.tintColor = UIColor.green()

对于特定控制器:

在初始化时设置窗口的色调颜色,并在取消初始化时设置应用程序的默认色调颜色。

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        let window = UIApplication.shared.windows.first
        window?.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        let window = UIApplication.shared.windows.first
        window?.tintColor = Theme.light.healthKit.BACK_BUTTON_TITLE_COLOR
    }

    deinit {
        let window = UIApplication.shared.windows.first
        window?.tintColor = Theme.light.App.DEFAULT_TINT_COLOR
    }
于 2020-04-13T10:51:19.777 回答