2015-10-09 2 views
1

Я пытаюсь показать некоторые данные в LastVC в зависимости от выбора пользователя в каждом представлении. Я Пусть вам образ нашего AppNSNotificationCenter. Отправлять данные от одного к другому ViewControllers Swift

Image

Я использую NSNotificationCenter, но метки в lastVC не меняются.

Что не так?

@IBOutlet слабый цвет varLabelSelected: UILabel!

@IBOutlet weak var nextOutlet: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    nextOutlet.hidden = true 



} 


@IBAction func greenButton(sender: AnyObject) { 

    NSNotificationCenter.defaultCenter().postNotificationName("setGreenColorID", object: nil) 

    colorLabelSelected.text = "You have selected a green BG color" 
    nextOutlet.hidden = false 


} 


@IBAction func blueButton(sender: AnyObject) { 

    NSNotificationCenter.defaultCenter().postNotificationName("setGreenColorID", object: nil) 

    colorLabelSelected.text = "You have selected a blue BG color" 
    nextOutlet.hidden = false 

} 


@IBAction func pinkButton(sender: AnyObject) { 

    NSNotificationCenter.defaultCenter().postNotificationName("setGreenColorID", object: nil) 

    colorLabelSelected.text = "You have selected a pink BG color" 
    nextOutlet.hidden = false 

} 

}

Класс ViewController2: UIViewController {

@IBOutlet weak var nextOutlet: UIButton! 


@IBOutlet weak var titleLabelSelected: UILabel! 


override func viewDidLoad() { 
    super.viewDidLoad() 

    nextOutlet.hidden = true 

} 

@IBAction func newsButton(sender: AnyObject) { 

    NSNotificationCenter.defaultCenter().postNotificationName("setNewsThemeID", object: nil) 

    titleLabelSelected.text = "You have selected News as title" 
    nextOutlet.hidden = false 

} 


@IBAction func sportButton(sender: AnyObject) { 

    NSNotificationCenter.defaultCenter().postNotificationName("setSportThemeID", object: nil) 

    titleLabelSelected.text = "You have selected Sport as title" 
    nextOutlet.hidden = false 

} 



@IBAction func wealthButton(sender: AnyObject) { 

    NSNotificationCenter.defaultCenter().postNotificationName("setWealthThemeID", object: nil) 

    titleLabelSelected.text = "You have selected Wealth as title" 
    nextOutlet.hidden = false 

} 

}

То же самое с VC3

Класс lastViewController: UIViewController {

@IBOutlet weak var finalColorLabel: UILabel! 


@IBOutlet weak var finalThemeLabel: UILabel! 


@IBOutlet weak var finalRelevanceLabel: UILabel! 





override func viewDidLoad() { 
    super.viewDidLoad() 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setBlueColor:", name: "setBlueColorID", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setGreenColor:", name: "setGreenColorID", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setPinkColor:", name: "setPinkColorID", object: nil) 


    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setNewsTheme:", name: "setNewsThemeID", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setSportTheme:", name: "setSportThemeID", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setWealthTheme:", name: "setWealthThemeID", object: nil) 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setTenPoints:", name: "setTenPointsID", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setSevenPoints:", name: "setSevenPointsID", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setFivePoints:", name: "setFivePointsID", object: nil) 




} 


//setColors 
func setBlueColor(notification: NSNotification) { 

    finalColorLabel.text = "blue" 


} 


func setGreenColor(notification: NSNotification) { 

    finalColorLabel.text = "green" 


} 

func setPinkColor(notification: NSNotification) { 

    finalColorLabel.text = "pink" 


} 

//setTheme 

func setNewsTheme(notification: NSNotification) { 

    finalThemeLabel.text = "news" 


} 


func setSportTheme(notification: NSNotification) { 

    finalThemeLabel.text = "sport" 


} 


func setWealthTheme(notification: NSNotification) { 


    finalThemeLabel.text = "wealth" 


} 



//setRelevance 

func setTenPoints(notification: NSNotification){ 

    finalRelevanceLabel.text = "ten" 


} 


func setSevenPoints(notification: NSNotification){ 

    finalRelevanceLabel.text = "seven" 


} 

func setFivePoints(notification: NSNotification){ 

    finalRelevanceLabel.text = "five" 


} 

ответ

0

Вы уверены, что lastVC существует даже при отправке уведомлений с других ViewControllers? Если вы перейдете к нему как часть обычного show segue, контроллер view get воссоздается каждый раз, когда вы переходите к нему.

Если вы хотите передавать данные с одного viewController на другой, вы должны, вероятно, сделать это в prepareForSegue. Я бы подойти к нему так

1) создать объект:

struct userSettings { 
    var backgroundColor: NSColor? 
    var title: String? 
    var relevance: Int? 
} 

2) заполнить соответствующее поле в каждом ViewController

3) передать его в подготовке к Segue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let identifier = segue.identifier { 
    switch identifier { 
    case segueToController: 
     if let viewController = segue.destinationViewController as? myControllerClass { 
     viewController.userSettings = userSettings 
     } 
    default: break 
    } 
    } 
} 
+0

Что, если мы хотим передать что-то более чем одному Vc? – FactorJose

+0

В этом случае вам, вероятно, придется разделить свой код на правильный MVC. Создайте userSettingsModel (должен быть класс, а не тип значения, например struct) и передать указатель при переходе на ViewController. Контроллер просмотра обновит модель любым пользователем, и все. – 66o

Смежные вопросы