Ios NSNotificationCenter。将数据从一个发送到另一个

Ios NSNotificationCenter。将数据从一个发送到另一个,ios,iphone,swift,Ios,Iphone,Swift,我试图根据用户在每个视图中的选择,在LastVC中显示一些数据。我让你看到我们应用程序的图像 我正在使用NSNotificationCenter,但上一个VC中的标签不会更改 怎么了 @IBOUTLE弱var颜色标签选择:UILabel @IBOutlet weak var nextOutlet: UIButton! override func viewDidLoad() { super.viewDidLoad() nextOutlet.hidden = true }

我试图根据用户在每个视图中的选择,在LastVC中显示一些数据。我让你看到我们应用程序的图像

我正在使用NSNotificationCenter,但上一个VC中的标签不会更改

怎么了

@IBOUTLE弱var颜色标签选择: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

}
@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"


}
}

VC3也是如此

类lastViewController: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

}
@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"


}

当您发布来自其他ViewController的通知时,是否确实存在lastVC?如果您将其作为正常节目的一部分进行切换,则每次切换时都会重新创建视图控制器

如果您想将数据从一个viewController传递到另一个viewController,您可能应该在PrepareForsgue中完成。我会这样做

1) 创建一个对象:

struct userSettings {
  var backgroundColor: NSColor?
  var title: String?
  var relevance: Int?
}
2) 在每个ViewController中填充适当的字段

3) 把它传过来,准备继续

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

当您发布来自其他ViewController的通知时,是否确实存在lastVC?如果您将其作为正常节目的一部分进行切换,则每次切换时都会重新创建视图控制器

如果您想将数据从一个viewController传递到另一个viewController,您可能应该在PrepareForsgue中完成。我会这样做

1) 创建一个对象:

struct userSettings {
  var backgroundColor: NSColor?
  var title: String?
  var relevance: Int?
}
2) 在每个ViewController中填充适当的字段

3) 把它传过来,准备继续

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

如果我们想把一些东西传递给多个Vc怎么办?在这种情况下,您可能需要将代码拆分成一个合适的MVC。创建一个userSettingsModel(应该是类,而不是像struct这样的值类型)并在切换到ViewController时传递一个指针。View controller将使用任何用户集更新模型,仅此而已。如果我们要将某些内容传递给多个Vc,该怎么办?在这种情况下,您可能需要将代码拆分为适当的MVC。创建userSettingsModel(应该是类,而不是struct之类的值类型)并在切换到ViewController时传递一个指针。View controller将使用任何用户设置更新模型,仅此而已。