2015-06-17 140 views
-1

我试图按下一个按钮时将值赋给变量,然后将其发送给我的第二个视图控制器。无法将变量传递给第二个视图控制器

我无法从我的第一个viewcontroller(FirstViewController.swift)传递一个变量(int)到我的secondcontroller(ViewController.swift)。

我的切入点是FirstViewController.swift

这是我的FirstViewController.swift代码:

import UIKit 

var language:Int = 0 

class FirstViewController: UIViewController { 

@IBAction func dutch(sender: AnyObject) { 
    language = 1 
    println(language)//check in console 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var soundsVC = segue.destinationViewController as! ViewController 

    soundsVC.languageSelected = language 
} 

当按下按钮@IBAction FUNC荷兰被激活,已经发生后,应该改变语言的为1的值

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

var languageSelected:Int = 0 

@IBAction func controleFunc(sender: AnyObject) { 
    println(languageSelected) 
    println(language) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.jpg")!) 
    // Do any additional setup after loading the view, typically from a nib. 
    println(languageSelected) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 



} 

我的输出是:

0 //languageSelected 
1 //language 
0 //languageSelected if the controle function is activated (controleFunc) 
1 //language if the controle function is activated (controleFunc) 

我刚开始学习Swift,所以我不知道为什么languageSelected不会采用语言的价值。是因为我声明了ViewController.swift顶部的languageSelected:Int = 0吗?我试图将其改为languageSelected:Int = language,但不幸的是我得到了相同的结果。

谢谢! 塞泽尔

+0

所以你真的有var语言__outside__ FirstViewController类,或者是一个错字? – nPn

回答

1

viewDidLoad()prepareForSegue()之前发生的事情,如果你想使用则传递的状态,无论是覆盖setter方法(如下),并用它做什么,或做在viewWillAppear()

var languageSelected:Int = 0 { 
    didSet { 
     print("The language is: \(languageSelected)") 
    } 
} 
1

我不是100%确定你是如何设置的,但是我认为你有相同的按钮,开始segue并在按下时调用函数dutch()。我不认为你保证dutch()会在prepareForSegue()之前被调用,但是你的代码依赖于它们按照这个顺序被调用。

我想移除dutch()(确保你在故事板上断开连接)并直接从prepareForSegue()传递值。如果你有更多的按钮开始一个segue,你可以通过将sender参数强制转换为UIButton并检查它的currentTitle属性来找出哪一个按钮启动了它。或者,您可以检查赛格标识符,无论您喜欢什么。

希望这会有所帮助!

相关问题