Ios NSNotificationCenter。将数据从一个发送到另一个
我试图根据用户在每个视图中的选择,在LastVC中显示一些数据。我让你看到我们应用程序的图像 我正在使用NSNotificationCenter,但上一个VC中的标签不会更改 怎么了 @IBOUTLE弱var颜色标签选择:UILabelIos 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 }
@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将使用任何用户设置更新模型,仅此而已。