swift 我在TextField中输入的数据不会传输到其他标签

8ehkhllq  于 2023-02-15  发布在  Swift
关注(0)|答案(1)|浏览(123)

大家好,你们能帮帮我吗?我有一个应用程序,有两个ViewController,在第一个VC中,我有四个空的TextField,在第二个VC中,我有四个空的Label,它们应该接收新信息并向我显示标签,但我的代码不工作,所以你能帮助解决这个问题吗?我认为我的personalData有问题

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var name: UITextField!
    
    @IBOutlet weak var age: UITextField!
    
    @IBOutlet weak var city: UITextField!
    
    @IBOutlet weak var mail: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let tap = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
        view.addGestureRecognizer(tap)
      
    }
    @objc func edit() {
        print("Edit is done")
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard segue.identifier == "personalData" else { return }
        guard let destination = segue.destination as? SecondViewController else { return }
        destination.personalData = name.text ?? ""
        destination.personalData = age.text ?? ""
        destination.personalData = city.text ?? ""
        destination.personalData = mail.text ?? ""
    }
    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
    

}
//////////////////////////////////////

import UIKit

class SecondViewController: UIViewController {
    
    
    struct User{
        
    }
    var personalData = ""
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        firstProfileLabel.text = personalData
        secondProfileLabel.text = personalData
        thirdProfileLabel.text = personalData
        lastProfileLabel.text = personalData
        print("SecondVC", #function)
        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .edit,
                                                                target: self,
                                                                action: #selector(edit))
    
    }
    @objc func edit() {
             print("Edit is done")
         }
    @IBOutlet weak var firstProfileLabel: UILabel!
    @IBOutlet weak var secondProfileLabel: UILabel!
    @IBOutlet weak var thirdProfileLabel: UILabel!
    @IBOutlet weak var lastProfileLabel: UILabel!
}

我的导师说:“问题出在变量personalData上,该变量是stripe类型,只能存储一个值,如果你想通过变量传递值,而不是直接传递值,可以创建一个结构,例如用户带有变量Name、Age、City等,并使personalData成为用户类型和空数组。”
但我不知道该怎么用代码写。

dsekswqp

dsekswqp1#

从简单的开始,为第二个视图控制器提供要传递的每个值的单独属性:

class SecondViewController: UIViewController {
    var name: String
    var age: String
    var city: String
    var mail: String
}

然后在第一个视图控制器的perpare(for:)方法中,分别设置每个变量:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        guard segue.identifier == "personalData" else { return }
        guard let destination = segue.destination as? SecondViewController else { return }
        destination.name = name.text ?? ""
        destination.age = age.text ?? ""
        destination.city = city.text ?? ""
        destination.mail = mail.text ?? ""
    }

重写第二个视图控制器的viewDidLoad方法,将每个属性安装到正确的字段中。
一旦你让它工作起来,你就可以知道如何在一个结构中传递所有的字符串值。
提示:
创建一个名为UserInfo的结构体:

struct UserInfo {
    let name: String
    let age: String
    let city: String
    let mail: String
}

然后给第二个视图控制器一个UserInfo类型的属性,并在prepare(for:)中设置**that

相关问题