ios - 如何更改应用程序颜色主题

时间:2016-07-02 16:27:01

标签: ios swift

您好我是ios dev的新手,我正在尝试制作按钮,这些按钮位于我的“设置viewController”中,更改整个应用程序的颜色主题(即背景颜色)。 下面的代码目前在appDelegate类中,因为我发现它可以很好地用于此目的。

所以现在我不确定如何让我的'settings viewController'中的按钮激活appDelegate中的代码。我应该为活动设置一个监听器吗?使用闭包?

感谢任何帮助。如果可能的话,请发布代码解决方案,这确实有帮助!:)

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UINavigationBar.appearance().tintColor = UIColor.whiteColor()
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
    Style.greenTheme()
}

3 个答案:

答案 0 :(得分:1)

我使用的解决方案:

extension UIColor{

  @nonobjc static var clr_blue: UIColor!

  static func initWithColorScheme(cs: ColorScheme){
    switch cs{
    case .Default:
      clr_blue = blueColor()
    case .Custom:
      clr_blue = UIColor(hue: 0.6, saturation: 0.85, brightness: 1, alpha: 1)
    }
  }

}

enum ColorScheme{
  case Default, Custom
}

根据需要创建任意数量的自定义颜色和配色方案。用法:

UIColor.clr_blue

但请勿忘记在application:didFinishLaunchingWithOptions:内初始化您的UIColor,如下所示:UIColor.initializeWithColorScheme(.Custom)

要更改当前UIViewController的颜色方案而不需要重新启动,请将此方法添加到UIViewController:

func changeSchemeTo(cs: ColorScheme){
  UIColor.initializeWithColorScheme(cs)
  for subview in self.view.subviews{
    subview.setNeedsDisplay()
  }
}

答案 1 :(得分:0)

appDelegate专门用于设置整个应用的选项。如果你想在点击按钮时做这些事情,你只需要将这些代码行添加到IBAction中,用于连接到你的界面的按钮:

@IBAction func greenButtonTapped(sender: AnyObject) {
    <#Code to be run when button tapped#>
}

然后只需将其连接到您的UI元素即可。

答案 2 :(得分:0)

  

所以现在我不知道如何让我的'settings viewController'中的按钮激活appDelegate中的代码

application:didFinishLaunchingWithOptions:中的代码会在您的应用启动时自动运行 。因此,这是配置外观代理的正确位置。没有什么可以“激活”。

如果您稍后运行其他代码来设置外观代理,请小心。这不是正常的事情。您无法使用外观代理更改现有界面元素的外观。当“主题”发生变化时,您需要手动更改现有界面。