2015-10-04 114 views
1

Description在斯威夫特

传递从几个VC的数据,最后一个你可以在这个PIC欣赏我们有三个不同的VC的一个App,比上选择了最后一个与一些可变数据取决于选项那些。

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

我们的想法是将数据从第一个VC,第二个VC和第三个VC传递到Last VC中的差距。

有什么建议吗?这将非常感激。

回答

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 

} 

然后你通过类型MyChoices的变量从一个VC到另一个你prepareForSegue方法

EDIT(一些更多的信息,看到FactorJose答案)

在VC 1添加变量

class VC1: UIViewController { 

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

var choice : MyChoice? 

... 

再往上:

@IBAction FUNC redButton(发件人:AnyObject){ nextOutlet.hidden =假

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是非常相似的再次

+0

你能更具体一点吗?我是Swift中的新编码。 这是一个NSObject类的对吗? – FactorJose

+0

不只是您自己定义的类,也不需要继承NSObject,一个普通的模型类(Model-View-Control = MVC)。在你的模型存储你的数据,你的意见,你把笏用户看到的,而Controller是 – Glenn

+0

他们之间那如果(segue.identifier ==“赛格瑞”){ 设VC = SEGUE胶水。 destinationViewController为! lastVC vc.passColor = self.color – FactorJose

-1

格伦的回答另一种方法是使用NSUserDefaults。把它想像为一个小型键值数据库PropertyList s。

您可以将新的键值添加到它与

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject(clothingColor, forKey: "Clothing Color") 

然后做

let defaults = NSUserDefaults.standardUserDefaults() 
let clothingColor = defaults.objectForKey("Clothing Color") 

由于用户默认检索以前保存的键值是共享和存储在磁盘,这些信息将持续存在于不同的视图控制器中。它也尊重封装,这是很好的面向对象实践,因为你的尺寸控制器不需要知道颜色或样式,反之亦然。

+0

是的,您可以使用NSUserDefaults,但我宁愿将它看作持久性存储(就像写入磁盘一样),而在这里实际上是将变量传递给...更喜欢在内存中做这样的事情,因为它的开销较小(在较慢的设备上速度更快) – Glenn

+0

感谢Edman为您准备的时间。我已经修改了这个问题 – FactorJose

0

Pic

大家好!正如你可以在这张照片中看到的,我们有一个App有三个不同的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? 
} 

我们可以做什么?

+0

@Glenn抱歉重复Glenn – FactorJose