簡體   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