所以我需要一个项目的帮助。我有一个简单的标签栏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。我会查看此链接以获取更多信息。