更改全局着色颜色-iOS7/iOS8

更改全局着色颜色-iOS7/iOS8,ios7,uicolor,tintcolor,Ios7,Uicolor,Tintcolor,如何通过代码更改iOS7/iOS8上的全局着色颜色?我想更改使用此属性的多个对象,但不想更改每个对象,这就是我想使用全局着色属性的原因。只需更改应用程序委托中的UIWindow的tintColor,它将作为默认值自动传递给其所有UIView子体 [self.window setTintColor:[UIColor greenColor]]; [[UIView外观]setTintColor:[UIColor greenColor]]通过设置窗口的“着色”属性,可以为整个应用指定着色颜色。为此,您

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

只需更改应用程序委托中的
UIWindow
tintColor
,它将作为默认值自动传递给其所有
UIView
子体

[self.window setTintColor:[UIColor greenColor]];

[[UIView外观]setTintColor:[UIColor greenColor]]

通过设置窗口的“着色”属性,可以为整个应用指定着色颜色。为此,您可以使用类似以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.tintColor = [UIColor purpleColor];
    return YES;
}

有两种方法可以更改全局着色颜色。如上所述,您可以在
中更改
self.window.tintColor
-应用程序:didfishlaunchingwithoptions:

在我看来,更优雅的方法是在故事板中设置文件检查器的全局着色,而不选择任何内容。这样,您的
-application:didfishlaunchingwithoptions:
就更干净了


为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()

为Swift 5更新

在应用程序代理中写入:

self.window?.tintColor = UIColor.green

以下事情对我不起作用:

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]
以下各项已工作:

  • 从情节提要设置全局着色颜色
  • 设置窗口的色调颜色
  • 对于整个应用程序:

    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
        }
    

    没错,相当简单,只需添加_window.tintColor=[UIColor purpleColor];(自动合成)但是我可以从其他视图更改它吗?它在任何
    UIView
    上实现,因此您可以在视图层次结构中的任何视图上设置它,并且它的所有子体都将继承相同的默认
    tintColor
    (除非您另有指定)重要事项:不要忘记测试选择器的ios6兼容性:
    if([窗口响应选择器:@selector(setTintColor:)]
    不过,这种方法似乎不会传播到导航工具栏。你应该使用外观协议,正如@carmen_munich在这里解释的那样:如果你需要为UIAlertView按钮而不仅仅是主应用程序窗口上色,这是最好的答案!
    UIView
    tintColor
    没有
    UI_外观选择器
    注释。这个答案是错误的。我认为这应该是正确的答案,因为它会影响UIAlertView,而被接受的答案不是。@Tobol在技术上是正确的。这一点有点混淆,需要苹果澄清。
    UIAppearance
    是在iOS 5中引入的一种处理全局颜色(以及更多)的方法,但在iOS 7中,苹果将
    tintColor
    移动到
    UIView
    并将其传播到子视图。在苹果的状态中:“iOS 7不支持使用外观代理API设置tintColor属性。”但它似乎仍然有效。谢谢Jamie。我认为我们应该将其定义为未定义的行为,因为它可以在未来的iOS版本中毫无警告地更改。我知道您指定了“按代码”,不过,我认为重要的是要提到情节提要的文件检查器中有一个全局着色属性,任何自定义XIB都不会受到
    UIWindow
    tintColor
    属性或您建议的全局着色的影响。不确定为什么更改情节提要选项不起作用,但
    self.window?.tintColor=UIColor(netHex:0xc0392b)
    做到了。如果Xcode能够正常工作,那将是令人惊讶的。也许这将在Xcode 345发布版上起作用。今天,正如预期的那样,Xcode在我头上乱丢垃圾,什么也不做。我希望苹果在不久的将来从开发工具负责人的位置上解雇撒旦。我觉得你是兄弟/姐妹。