2015-08-17 20 views
4

我在Xcode中的兩個不同的.storyboard文件內的兩個不同的UIViewControllers之間傳遞數據。 (這是一個相當大的項目,所以我不得不將它分解成不同的故事板。)在不帶Segges的Storyboard之間傳遞變量Swift

我已經在視圖內建立了一個「exercisePassed」變量(字符串)我想將數據傳遞給我,並且我已經知道如何在位於不同故事板內的兩個視圖之間移動。像這樣。

var storyboard = UIStoryboard(name: "IDEInterface", bundle: nil) 
var controller = storyboard.instantiateViewControllerWithIdentifier("IDENavController") as! UIViewController 

//************************************** 
var ex = //Stuck Here 
ex.exercisedPassed = "Ex1" 
//************************************** 

self.presentViewController(controller, animated: true, completion: nil) 

如何在不使用Segue/PrepareForSegue的情況下傳遞數據?

+0

,如果它只是一個字符串使用nsuserdefaults –

+0

或使用setter方法設置變量 –

+0

下面是一個出色的解釋:http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers –

回答

20

我假設你想要傳遞數據的viewController是一個自定義viewController。在這種情況下,請在此處使用此修正的代碼:

var storyboard = UIStoryboard(name: "IDEInterface", bundle: nil) 
var controller = storyboard.instantiateViewControllerWithIdentifier("IDENavController") as! MyCustomViewController 

controller.exercisedPassed = "Ex1" 

self.presentViewController(controller, animated: true, completion: nil) 
+0

我的觀點實際上有一個嵌入的UINavigationController。 Xcode只給了我以下錯誤**無法將類型'UINavigationController'(0x2cdff8c)的值轉換爲'myApp.myCustomViewController'(0x1d3e18)。**任何建議?謝謝btw。 –

+0

是的,嘗試將MyCustomViewController更改爲UINavigationController – Swinny89

+0

我不假設你知道如何在.xib彈出窗口和它當前顯示的屏幕之間同樣傳遞一個變量?遇到一些困難。本質上 - 我想從popover傳遞一個字符串,回到它的父屏幕。我需要以某種方式重新加載父屏幕嗎? –

2

試試這個。這對我有效。

var storyboard = UIStoryboard(name: "IDEInterface", bundle: nil) 
var controller = storyboard.instantiateViewControllerWithIdentifier("IDENavController") as! YourDestinationViewControllername 
// Add your destination view controller name and Identifier 

// For example consider that there is an variable xyz in your destination View Controller and you are passing "ABC" values from current viewController. 

controller.xyz = "ABC" 

self.presentViewController(controller, animated: true, completion: nil) 

希望這會有所幫助。

+0

即使我已經嘗試過類似的東西......它的工作原理 –

+0

如何在swift 3中做到這一點? – mythicalcoder

3

你的問題不是很清楚,據我已經明白

//1 
//create a variable in "IDENavController" 
//e.g 
var someVariable = @"" 

//2 
var controller = storyboard.instantiateViewControllerWithIdentifier("IDENavController") as!  UIViewController 
controller.someVariable = [assign your variable] 

//3 
self.presentViewController(controller, animated: true, completion: nil) 
1

對於那些誰正在尋找斯威夫特3/4答案:

let storyboard = UIStoryboard(name: "IDEInterface", bundle: nil) 
let controller = storyboard.instantiateViewController(withIdentifier: "IDENavController") as! CustomViewController 

controller.yourVariable = "abc" 

self.present(controller, animated: true, completion: nil) 
+0

現在已經有點晚了。但是,謝謝。我剛剛投票。 – mythicalcoder

+0

沒問題。很高興我能幫上忙 :) – Xcoder