2015-10-04 161 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