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



所以我需要一个项目的帮助。我有一个简单的标签栏SVC,其中第一个视图是计时器,第二个是设置页面。在设置页面上,我设置了一个带有颜色数组的结构,然后当用户单击按钮时,数组中的随机颜色将被调用并应用于背景。这部分工作就像我想要的那样。然后,我想做的是将该颜色应用于第二个视图的背景。

这是设置代码

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 有一个简洁的功能,称为单例,可用于管理视图控制器列表中的"设置"。在计时器视图的viewDidLoad()方法中,可以将视图的背景色设置为singleton.backgroundColor。在设置视图中,当用户选择新颜色时,应设置singleton.backgroundColor = newColorThatUserChose。这样,当用户切换回计时器视图时,颜色将自动切换。

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

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

然后在计时器视图的 viewDidLoad 方法中:

self.view.backgroundColor = Settings.sharedInstance.backgroundColor

最后在设置视图控制器中,当用户选择新颜色时:

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.

为了进一步抽象这一点,您可以创建一个名为GeneralUIViewController的自定义类,该类是UIViewController类型的类,并且在其viewDidLoad方法中具有上述代码。完成此操作后,每个UIView控制器都应将其类设置为GeneralUIViewController。这样,您只需在一个文件中设置背景颜色,项目中的每个视图控制器将自动继承其背景颜色的设置,以用户在此应用程序的设置页面中选择。

重新打开应用程序时,可能应该保存这些首选项,以便可以使用 CoreData。我会查看此链接以获取更多信息。

最新更新