在没有 Segues 的故事板之间传递变量 - Swift

Posted

技术标签:

【中文标题】在没有 Segues 的故事板之间传递变量 - Swift【英文标题】:Passing variables between Storyboards without Segues - Swift 【发布时间】:2015-08-17 13:25:26 【问题描述】:

我在位于 Xcode 中两个不同 .storyboard 文件中的两个不同 UIViewController 之间传递数据。 (这是一个相当大的项目,所以我不得不将它分解成不同的故事板。)

我已经在我想将数据传递到的视图中建立了一个“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 或者使用setter方法设置变量 这里有一个很好的解释:***.com/questions/5210535/… 不要使用 nsuserdefaults。以正确的方式去做。 【参考方案1】:

我假设您要向其传递数据的 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)

【讨论】:

我的视图实际上有一个嵌入的 UINavigationController。 Xcode 刚刚给了我以下错误 Could not cast value of type 'UINavigationController' (0x2cdff8c) to 'myApp.myCustomViewController' (0x1d3e18). 有什么建议吗?谢谢顺便说一句。 是的,尝试将 MyCustomViewController 更改为 UINavigationController 我想你不知道如何在 .xib 弹出框和它当前显示的屏幕之间类似地传递一个变量?有一些困难。本质上-我想将弹出窗口中的字符串传递回其父屏幕。我需要以某种方式重新加载父屏幕吗? 如何在 Swift 3 中做到这一点?【参考方案2】:

据我了解,你的问题不是很清楚

//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)

【讨论】:

【参考方案3】:

试试这个。这对我有用。

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)

希望这会有所帮助。

【讨论】:

即使我尝试过类似性质的东西......它也有效 如何在 swift 3 中做到这一点?【参考方案4】:

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

【讨论】:

现在有点晚了。不过谢谢。我刚刚投了赞成票。 没问题。很高兴我能帮忙:)

以上是关于在没有 Segues 的故事板之间传递变量 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

故事板 Segue 与委派。哪种方法更适合在 ViewController 之间传递数据

我无法向 segues 添加标识符。有没有办法修复 ios xamarin 故事板?

故事板 segue 调用顺序

故事板中的 Segues 问题

在故事板xcode中直接从视图控制器警告启动的Segues

在没有 Segues 的 ViewController 之间传递数据