在没有 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 之间传递数据