2017-06-09 5 views
1

Also brauche ich etwas Hilfe für ein Projekt. Ich habe eine einfache Registerkarte SVC, wo die erste Ansicht ist ein Timer und die zweite ist eine Einstellungsseite. Auf der Einstellungsseite habe ich eine Struktur mit einem Array von Farben eingerichtet, und wenn ein Benutzer auf eine Schaltfläche klickt, wird eine zufällige Farbe im Array aufgerufen und auf den Hintergrund angewendet. Dieser Teil funktioniert genauso wie ich es vorhabe. Was ich tun möchte, ist, diese Farbe dann auf den Hintergrund der zweiten Ansicht anzuwenden.Ändern viewController BG Farbe basiert auf einem anderen View Controller

Hier die Einstellungen Code

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

}

Dann habe ich diese in der Hauptviewcontroller ich von hier gezogen: Changing background color of all views in project from one view controller?

Die Funktion Fehler tritt nicht aus, unten Fehler aber ich bin bestenfalls ein noob, ich bin mir nicht sicher, wie die Glocke funktionieren soll und ich bezweifle, dass sie überhaupt angerufen wird. Jede Hilfe wird geschätzt.

// 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 
    } 
} 
+0

Erstellen Sie ein Singleton, um die Farbe und die ausgewählte Farbe zu verwalten, oder drücken Sie einfach die Farbe auf den 2. Viewcontroller – Tj3n

+0

Welchen Fehler? Verwenden Sie den Tab-Controller? oder nur tabBar? –

+0

werfen Sie einen Blick auf meine Antwort unten sollte sich um Ihr Problem kümmern. LMK, wenn Sie noch etwas brauchen! –

Antwort

0

Swift hat dieses nette Feature eine singleton genannt, die verwendet werden können, „Einstellungen“ über eine Liste der Ansicht-Controller zu verwalten. In der Methode viewDidLoad() der Timeransicht können Sie die Hintergrundfarbe der Ansicht auf singleton.backgroundColor setzen. Wenn der Benutzer in der Einstellungsansicht eine neue Farbe auswählt, sollte er singleton.backgroundColor = newColorThatUserChose festlegen. Auf diese Weise wechselt die Farbe automatisch, wenn der Benutzer zur Timeransicht zurückwechselt.

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

für die Timer-Ansicht in der viewDidLoad Methode Dann:

self.view.backgroundColor = Settings.sharedInstance.backgroundColor 

schließlich im SettingsViewController, wenn der Benutzer

Wie oben in der Verbindung dargestellt ist, kann ein Singleton wie folgt erstellt werden wählt eine neue Farbe:

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

Dadurch können sich die Ansichten ändern automatisch basierend auf den Einstellungen der Apps. Um sicherzustellen, dass diese in allen Ansichten arbeitet, die Sie gerne für die Farbe ändern,

self.view.backgroundColor = Settings.sharedInstance.backgroundColor 

sollte in jedem UIViewController platziert werden.

Um dies weiter zu abstrahieren, können Sie eine benutzerdefinierte Klasse namens GeneralUIViewController erstellen, die eine Klasse des Typs UIViewController ist und den obigen Code in seiner viewDidLoad-Methode hat. Danach sollte jeder UIViewController seine Klasse auf GeneralUIViewController setzen. Dies macht es so, dass Sie nur die Hintergrundfarbe in einer Datei einstellen müssen und jeder View-Controller in Ihrem Projekt übernimmt automatisch die Einstellung der Hintergrundfarbe auf das, was der Benutzer auf der Einstellungsseite dieser Anwendung gewählt hat.

Diese Einstellungen sollten beim erneuten Öffnen der Anwendung gespeichert werden, damit CoreData dafür verwendet werden kann. Ich würde überprüfen this link für weitere Informationen.

+0

hervorragend! Ich denke, das wird den Trick bringen. Allerdings habe ich in meiner Timer Ansicht haben: 'Überschreibung func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = Settings.sharedInstance.backgroundColor \t \t print (Settings.sharedInstance.backgroundColor) }' Ich lief in ein Problem. Nachdem ich die BG-Farbe in den Einstellungen eingestellt habe, wenn ich zur Haupt-Timer-Ansicht zurückkehre, ändert sich die BG nicht. Als Test habe ich die self.view ... in meinen Startknopf und Bingo eingefügt, nach dem Start wird der BG geändert. Warum ändert sich das in ViewDidLoad nicht? – aboodness

Verwandte Themen