我正在尝试将一个字符串从一个视图控制器传递到另一个视图控制器,同时使用 segues 展开但我无法这样做

I am trying to pass a string from one view controller to another view controller while unwinding using segues and I am not able to do so

显示source view controller没有string变量,怎么办?

这是我的源视图控制器中的代码

@IBOutlet var textfield: UITextField!
@IBOutlet var tofirstbutton: UIButton!
@IBOutlet var tosecondbutton: UIButton!

var s:String!

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "unwindtosecond"{
        self.s=self.textfield.text
    }

}

这是我的目标视图控制器中的代码

@IBOutlet var textfield: UITextField!
@IBOutlet var tofirstbutton: UIButton!
@IBOutlet var tothirdbutton: UIButton!
@IBOutlet var label: UILabel!

@IBAction func unwindtosecond(Segue:UIStoryboardSegue){

    if Segue.identifier == "unwindtosecond" {
        var source:ViewController = Segue.sourceViewController as ViewController

        var s:String = source.s!
    }

我收到一条错误消息,指出 viewcontroller 没有名为 s 的成员。

尝试这些解决方案:

  1. 协议代表:
  2. 将闭包设置为 属性:

这里是一些示例代码,用于实现主控制器连接到第二个 VC,第二个展开到主控制器。请注意,在第二个 cVC 展开的函数中,您可以引用第二个控制器并访问第二个控制器中的变量。如果你想在主 VC 的第二个 VC 中初始化一个变量,你可以在主 VC.

中使用 prepareForSegue
import UIKit

class ViewController: UIViewController {
var varInMainVC = ""

@IBAction func segueToSecondVCAction(sender: UIButton) {
    performSegueWithIdentifier("segueToSecondVC", sender: self)
}
@IBAction func unwindFromSecondVC(segue: UIStoryboardSegue) {
    // return here from second VC
    let vc = segue.sourceViewController as! SecondViewController
    varInMainVC = vc.varInSecondVC
    println("varInMainVC = \(varInMainVC)")

}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

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


}

import UIKit

class SecondViewController: UIViewController {
var varInSecondVC = ""
var varLoadedFromMainVC = 0

override func viewDidLoad() {
    super.viewDidLoad()
    varInSecondVC = "Test String to be returned"

}

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


}