在Swift中,不使用Segues在Storyboard之间传递变量

5
我正在在Xcode中的两个不同.storyboard文件中的两个不同的UIViewControllers之间传递数据。(这是一个相当大的项目,所以我必须将其拆分为不同的storyboards。)
我已经在我想传递数据到的视图中建立了一个“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 的情况下传递数据?

如果只是一个字符串,请使用NSUserDefaults。 - Teja Nandamuri
使用setter方法设置变量。 - Teja Nandamuri
以下是一个杰出的解释:https://dev59.com/z2435IYBdhLWcg3wyzQJ - Samuel Noyes
不要使用NSUserDefaults。用正确的方式来实现。 - Samuel Noyes
4个回答

24

我假设您想要传递数据的视图控制器是自定义视图控制器。在这种情况下,请使用这里修正的代码:

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

controller.exercisedPassed = "Ex1"

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

我的视图实际上有一个嵌入的UINavigationController。Xcode刚刚给了我以下错误无法将类型为'UINavigationController'(0x2cdff8c)的值强制转换为'myApp.myCustomViewController'(0x1d3e18)。 有什么建议吗?顺便说一下,谢谢。 - Gavin Friel
是的,请尝试将MyCustomViewController更改为UINavigationController。 - Swinny89
我不确定你是否知道如何在.xib弹出窗口和当前显示的屏幕之间传递变量?我遇到了一些困难。基本上,我想从弹出窗口将一个字符串传回其父屏幕。我需要以某种方式重新加载父屏幕吗? - Gavin Friel
1
如何在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)

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)

希望这对您有所帮助。


即使我尝试过类似的东西...它有效。 - Sumit Kumar Saha
如何在Swift 3中实现这个? - mythicalcoder

1
对于那些正在寻找Swift 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)

有点晚了。但还是谢谢。我刚刚点赞了。 - mythicalcoder
没问题。很高兴能帮到你 :) - Xcoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接