基于另一个视图控制器更改viewController BG颜色

所以我需要一些项目的帮助。 我有一个简单的标签栏SVC第一个视图是一个计时器,第二个是设置页面。 在设置页面上,我设置了一个带有颜色数组的结构,然后当用户单击一个button时,数组中的随机颜色被调用并应用到后台。 这部分工作正如我的意图。 我想要做的是将这种颜色应用到第二个视图的背景。

这是设置代码

import UIKit import GameKit public var randomColor = UIColor() class SettingsViewController: UIViewController { @IBOutlet weak var pushMe: UIButton! let colorProvider = BackgroundColorProvider() @IBAction func pushMeChange(_ sender: Any) { randomColor = colorProvider.randomColorBG() print (randomColor.superclass as Any) view.backgroundColor = randomColor } struct BackgroundColorProvider { let colors = [ UIColor(red: 90/255.0, green: 187/255.0, blue: 181/255.0, alpha: 1.0), // teal color UIColor(red: 222/255.0, green: 171/255.0, blue: 66/255.0, alpha: 1.0), // yellow color UIColor(red: 223/255.0, green: 86/255.0, blue: 94/255.0, alpha: 1.0), // red color UIColor(red: 239/255.0, green: 130/255.0, blue: 100/255.0, alpha: 1.0), // orange color UIColor(red: 77/255.0, green: 75/255.0, blue: 82/255.0, alpha: 1.0), // dark color UIColor(red: 105/255.0, green: 94/255.0, blue: 133/255.0, alpha: 1.0), // purple color UIColor(red: 85/255.0, green: 176/255.0, blue: 112/255.0, alpha: 1.0), // green color ] func randomColorBG() -> UIColor { let randomNumber = GKRandomSource.sharedRandom().nextInt(upperBound: colors.count) return colors[randomNumber] } } 

}

然后我在这里从我从这里拉的主视图控制器:从一个视图控制器的项目中更改所有视图的背景颜色?

函数在下面的错误不会错误,但是我是一个最好的白鸟,我不知道如何响铃应该工作,我怀疑它甚至被称为。 任何帮助表示赞赏。

 // bringing in background color from SettingsViewController func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { if (segue.identifier == "Load View") { // pass data to next view let viewController:SettingsViewController = segue!.destination as! SettingsViewController viewController.view.backgroundColor = self.view.backgroundColor } } 

Swift有这个简单的特性叫做单例 ,可以用来pipe理视图控制器列表中的“设置”。 在定时器视图的viewDidLoad()方法中,您可以将视图的背景颜色设置为singleton.backgroundColor 。 在设置视图中,当用户select一种新的颜色时,应该设置singleton.backgroundColor = newColorThatUserChose 。 这样,当用户切换回定时器视图时,颜色将自动切换。

如上面的链接所示,可以像这样创build一个单例:

 class Settings { static let sharedInstance = Settings() var backgroundColor = UIColor.White // set to white by default. } 

然后在Timer View的viewDidLoad方法中:

 self.view.backgroundColor = Settings.sharedInstance.backgroundColor 

最后在SettingsViewController中当用户select一种新的颜色时:

 var color = [UIColor.White, UIColor.Black, UIColor.Blue, UIColor.Green........] Settings.sharedInstance.backgroundColor = color[x] // where x is the index that was chosen. 

这将允许视图根据应用程序设置自动更改。 为确保在所有您想要更改颜色的视图中都能正常工作,

 self.view.backgroundColor = Settings.sharedInstance.backgroundColor 

应该放在每个UIViewController

为了进一步抽象,可以创build一个名为GeneralUIViewController的自定义类,它是UIViewController类的一个类,在其viewDidLoad方法中包含上面的代码。 这样做后,每个UIViewController应该有它的类设置为GeneralUIViewController 。 这样做只需要在一个文件中设置背景颜色,并且项目中的每个视图控制器都会自动inheritance将其背景颜色设置为用户在此应用程序的设置页面中select的内容。

应用程序重新打开时应该保存这些首选项,以便CoreData可用于此目的。 我会看看这个链接了解更多信息。