【问题标题】:How to pass data from multiple views to one?如何将数据从多个视图传递到一个?
【发布时间】:2017-12-22 02:44:46
【问题描述】:

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

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

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 是coolerString)。

【问题讨论】:

  • 结构是最好的选择,或者你可以使用 NSUserDefaults Preferred Structs

标签: ios swift variables view


【解决方案1】:

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

  1. 执行转场时
  2. 在您的代码中以编程方式触发转换
  3. 通过应用的状态
  4. 使用单例
  5. 使用应用委托
  6. 将委托分配给视图控制器
  7. 通过放松转场
  8. 直接引用视图控制器
  9. 使用用户默认值
  10. 通过通知

【讨论】:

    【解决方案2】:

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

    创建一个名为“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)
    

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

    【讨论】:

    • 不太明白(抱歉,Swift 新手)。我是替换整个为 segue 做准备的东西还是将它与 segue 的东西一起使用?当我尝试更改值时,我无法像您的示例那样做到这一点。给我这个错误:'Instance member 'cpu' cannot be used on type 'CPU_ViewController.Global''
    • 只需设置按钮被点击或任何地方的值,它可以在另一个控制器中使用。不需要在 segue 中设置值
    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多