将数据从几个VC传递到Swift中的最后一个

时间:2015-10-04 20:22:41

标签: ios swift

Description

正如您在本照片中所欣赏的那样,我们有一个带有三个不同VC的应用程序和一个带有一些可变数据的应用程序,具体取决于之前选择的选项。

因此,例如,在这种情况下,用户选择了蓝色,合适的样式和L作为大小。

我们的想法是将第一个VC,第二个VC和第三个VC的数据传递给Last VC中的空白。

有什么建议吗?非常感谢。

3 个答案:

答案 0 :(得分:1)

创建一个模型类,您可以在其中存储这些属性:

class MyChoices {

var color : String? // or you could use enums for each of them
var style : String? // that would be a better choice, but for the
var size : String? // sake of simplicity I use strings in this example

}

然后在prepareForSegue方法中将MyChoices类型的变量从一个VC传递到另一个VC

编辑(更多信息,请参阅FactorJose的答案)

在VC 1中添加变量

class VC1: UIViewController {

@IBOutlet weak var nextOutlet: UIButton!
@IBOutlet weak var colourLabel: UILabel!

var choice : MyChoice?

...

然后继续:

@IBAction func redButton(sender:AnyObject){     nextOutlet.hidden = false

colourLabel.text = "Red colour selected"
choice.color = "Red"

}

所有这些IBActions。

然后在你的prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

let nextVC = segue.destinationViewController as! VC2
nextVC.choice = self.choice
}

VC2和VC3再次非常相似

答案 1 :(得分:0)

Pic

大家好!正如你在这张照片中所欣赏的那样,我们有一个带有三个不同VC的应用程序和一个带有一些可变数据的应用程序,具体取决于之前选择的选项。

因此,例如,在这种情况下,用户选择了蓝色,合适的样式和L作为大小。

我们的想法是将第一个VC,第二个VC和第三个VC的数据传递给Last VC中的空白。

有什么建议吗?非常感谢

代码:

class VC1: UIViewController {


@IBOutlet weak var nextOutlet: UIButton!
@IBOutlet weak var colourLabel: UILabel!

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

    nextOutlet.hidden = true

}

@IBAction func redButton(sender: AnyObject) {
    nextOutlet.hidden = false

    colourLabel.text = "Red colour selected"

}


@IBAction func blueButton(sender: AnyObject) {

    nextOutlet.hidden = false

    colourLabel.text = "Blue colour selected"

}

@IBAction func greenButton(sender: AnyObject) {

    nextOutlet.hidden = false

    colourLabel.text = "Green colour selected"

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {}
}

VC2和VC3与VC1(相同的插座和按钮)相同

lastVC

@IBOutlet weak var colourLabel: UILabel!
@IBOutlet weak var styleLabel: UILabel!
@IBOutlet weak var sizeLabel: UILabel!

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

最后一个存储字符串的类

import UIKit

class MyChoices {

var colour : String?
var style : String?
var size : String?
}

我们能做什么?

答案 2 :(得分:-1)

Glenn的回答是使用NSUserDefaults。可以把它想象成PropertyList s的迷你键值数据库。

您可以使用

为其添加新的键值
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(clothingColor, forKey: "Clothing Color")

然后通过执行

检索以前保存的键值
let defaults = NSUserDefaults.standardUserDefaults()
let clothingColor = defaults.objectForKey("Clothing Color")

由于用户默认值是共享的并存储在磁盘中,因此信息将在不同的视图控制器中保留。它还尊重封装,这是一种很好的面向对象实践,因为你的尺寸控制器不必知道任何关于颜色或样式的信息,反之亦然。