如何将数据从多个视图传递到一个?

时间:2017-12-22 02:44:46

标签: ios swift variables view

在我的主控制器中,我有多个标签,我还有七个视图,每个视图我需要将一个变量传递给主变量并填充其中一个标签。现在我的问题是,当我发送一个变量并填充一个标签,然后我转到另一个页面并尝试发送一个变量,它按照预期填充一个单独的标签,但它也删除另一个的文本标签。这就是我一直在做的事情:

此代码位于其中一个辅助视图(不是带有标签的视图)

var cpu: String = ""

@IBAction func intel8350k(_ sender: UIButton) {
    cpu = "Intel Core i3 8350k"

    if cpu != "" {
        performSegue(withIdentifier: "seuge",  sender: self)
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    var mainController = segue.destination as! ViewController
    mainController.cpuString = cpu
}

在带有标签的主视图上:

var cpuString = ""

@IBOutlet weak var cpuLabel: UILabel!

cpuLabel.text = cpuString

对于其他视图,我想从其中发送数据几乎相同,只是替换了变量(例如cpuString是coolString)。

2 个答案:

答案 0 :(得分:3)

以下是在视图控制器之间传递数据的所有方法:

  1. 执行segue时
  2. 在代码中以编程方式触发转换
  3. 通过应用程序的状态
  4. 使用单身人士
  5. 使用app delegate
  6. 将代理人分配给视图控制器
  7. 通过展开赛段
  8. 直接引用视图控制器
  9. 使用用户默认值
  10. 通过通知

答案 1 :(得分:0)

在目前的情况下,我认为您可以简单地使用全局变量来保存您想要在不同页面/控制器中传递的多个值。

创建一个名为" Global.swift"

的新文件
struct Global {
    static var cpu = ""
    static var memory = ""
}

因此,在许多控制器中,您可以轻松地使用它来存储和获取如下数据。

// set the value
Global.cpu = "20.0"
Global.memory = "0.4"

// get value
print(Global.cpu)

请注意,每次运行应用程序时都会重置此变量。