gpt4 book ai didi

ios - 根据另一个 View Controller 更改 viewController BG 颜色

转载 作者:行者123 更新时间:2023-11-28 08:08:23 25 4
gpt4 key购买 nike

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

这里是设置代码

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]
}
}

然后我在从这里拉出的主 viewController 中有这个: Changing background color of all views in project from one view controller?

下面的函数不会出错,但我充其量只是个菜鸟,我不确定铃应该如何工作,我什至怀疑它是否被调用。感谢您的帮助。

// 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 有一个叫做 singleton 的简洁功能。可用于管理 View Controller 列表中的“设置”。在viewDidLoad()计时器 View 的方法,您可以将 View 的背景颜色设置为 singleton.backgroundColor .在设置 View 中,当用户选择新颜色时,应该设置 singleton.backgroundColor = newColorThatUserChose .这样,当用户切换回 Timer View 时,颜色会自动切换。

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

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 中,当用户选择新颜色时:

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

这将允许 View 根据应用程序设置自动更改。为确保这适用于您想要更改颜色的所有 View ,

self.view.backgroundColor = Settings.sharedInstance.backgroundColor

应该放在每个 UIViewController 中.

为了进一步抽象它,您可以创建一个名为 GeneralUIViewController 的自定义类这是一类类型 UIViewController并在其 viewDidLoad 中包含上述代码方法。这样做之后,每个 UIViewController 都应该将其类设置为 GeneralUIViewController .这样一来,您只需在一个文件中设置背景颜色,项目中的每个 View Controller 都会自动继承设置其背景颜色为用户在此应用程序的设置页面中选择的颜色。

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

关于ios - 根据另一个 View Controller 更改 viewController BG 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com