繁体   English   中英

根据另一个视图控制器更改viewController BG颜色

[英]Change viewController BG color based off another view controller

所以我需要一些项目的帮助。 我有一个简单的标签栏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.
}

然后在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.

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

self.view.backgroundColor = Settings.sharedInstance.backgroundColor

应放在每个UIViewController

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM