其他页面上的变量转换错误

Error to variable transition on other page

我正在创建一个问候应用程序,用户可以输入他们的名字和应用程序 return "Hello Jack!"

错误信息

Type 'UIViewController' has no member 'textFieldString'

如何修复它,因为我已经在 ViewController.swift 上设置了变量。

        textFieldString = textField.text!

代码

ViewController.swift

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var textField: UITextField!
    [![enter image description here][1]][1]
    var textFieldString = ""

    @IBAction func pushButton(_ sender: UIButton){
        textFieldString = textField.text!
        textField.text = ""
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let resultViewController = segue.destination as! ResultViewController
        resultViewController.result = textFieldString
    }

    @IBAction func unwind(_ segue: UIStoryboardSegue) {

    }



}

结果ViewController.swift

import UIKit

class ResultViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    var result: String?

    override func viewDidLoad() {
            super.viewDidLoad()

               label.translatesAutoresizingMaskIntoConstraints = false
               label.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
               label.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
               label.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
               label.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true

        label.text = "Hello\(result)! "
           }
}

截图

原因:

textFieldStringViewController 的 属性 而不是 UIViewController.

解法:

ResultViewController中创建一个属性result并在viewDidLoad()中设置为label

class ResultViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    var result: String?

    override func viewDidLoad() {
        super.viewDidLoad()
        //rest of the code...
        label.text = "Hello\(result ?? "")" //here...
    }
}

现在在 ViewController's prepare(for:sender:) 方法中将 result 设置为 textFieldString,即

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let resultViewController = segue.destination as! ResultViewController
    resultViewController.result = textField.text
}

您只需要以您之前的 ViewController 作为目的地执行 segue。

像这样:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destination = segue.destination as? ViewController
    destination?.textField.text = "Hello Jack"
}

嘿@NPP 我已经检查了您编写的所有代码,如果您需要,我也可以将代码示例发送给您。您的问题是您没有将 IBOutlet 连接到您的文本字段。

@IBOutlet weak var textField: UITextField!

这是您的 IBOutlet,请将它连接到故事板中的文本字段。

谢谢