【问题标题】:Get global tint color from code从代码中获取全局色调颜色
【发布时间】:2013-10-08 20:40:47
【问题描述】:

有没有办法通过代码从我的项目中获取全局色调颜色?为避免误解,我指的是全局色调颜色,我可以在文件检查器中设置。

【问题讨论】:

    标签: ios7 xcode5 tintcolor


    【解决方案1】:

    在应用程序委托中,您可以设置它

    UIColor *globalTint = [[[UIApplication sharedApplication] delegate] window].tintColor;
    

    【讨论】:

    • 那里我得到了视图 tintColor 但它不等于全局 tint 颜色。
    • 全局色调颜色应该是窗口的色调颜色。这是获取窗口。它对我有用,或者您可以获取应用程序委托,从那里获取窗口并再次获取色调。没有其他方法可以获取色调。
    • 奇怪,因为我用你的解决方案得到了蓝色,虽然我在文件检查器中调整了橙色并且按钮颜色是橙色。
    • 猜猜你不能得到它。我只是在应用程序委托中设置了窗口色调,它作为全局色调工作。但据我所知,除此之外没有用于全局色调的 API。
    • 这似乎不起作用。 [[self view] tintColor] 确实有效。
    【解决方案2】:

    简单。

    目标 C:

    UIColor *tintColor = [[self view]tintColor];
    

    斯威夫特:

    let tintColor = self.view.tintColor;
    

    这应该会在应用程序上设置 tintColor。如果你改变它,这个属性应该得到更新。这假设您在 viewController 或其中一个的子类中,并且您没有在此视图和窗口之间的某个 superView 中覆盖 tintColor。

    更新:请注意,如果您尝试获取尚未添加到窗口的视图控制器的色调颜色,那么它将没有自定义色调颜色,因为此颜色是从窗口对象。感谢@ManuelWa 在 cmets 中指出这一点。

    【讨论】:

    • 在 viewController 尚未打开时使用它,例如窗口的 rootViewController 的导航堆栈。它将返回系统的标准 tintColor,如果您自己设置,它可能与您自定义的不同。
    【解决方案3】:

    Max 的回答是正确的,但是我发现你必须得到navigationController 的窗口:

    self.navigationController.view.window.tintColor = [UIColor redColor];
    

    但是,请注意,如果您从 Storyboard 手动设置了 tintColor,这将不起作用。如果您这样做了,将使用 Storyboard 中的值。我对此有filed a bug with Apple。我认为即使我们从 Storyboard 设置了 tintColor,也不应该忽略这段代码。

    【讨论】:

      【解决方案4】:
      [UIApplication sharedApplication].delegate.window.rootViewController.view.tintColor
      

      似乎有效。

      【讨论】:

      • 终于更新了答案!谢谢!在 App 委托上测试:self.window?.rootViewController?.view.tintColor。在 UITabBarController 的视图中:UIApplication.shared.delegate?.window?.rootViewController.view.tintColor
      【解决方案5】:
      [UIApplication sharedApplication].keyWindow.tintColor;
      

      【讨论】:

      • 这将在带有 UIScene 的 iPad/Catalyst 上中断,那里没有 keyWindow
      【解决方案6】:

      Swift 4.x

      extension UIColor {
          static var tintColor: UIColor {
              get {
                  return UIApplication.shared.keyWindow?.rootViewController?.view.tintColor ?? .red
              }
          }
      }
      

      用法

      textField.textColor = .tintColor
      

      【讨论】:

        猜你喜欢
        • 2013-05-24
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 2020-06-14
        相关资源
        最近更新 更多