如何将值传递给第二个控制器
Posted
技术标签:
【中文标题】如何将值传递给第二个控制器【英文标题】:How to pass value to secondController 【发布时间】:2016-04-06 17:44:23 【问题描述】:您好,我想将值传递给我的第二个 Controller。第二个 Controller 连接到 NavigationController,并且情节提要 Id 已在 NavigationController 中设置,而不是在 SecondViewController 中
我这样展示 ViewControllers
var _profile : UINavigationController
get
return self.storyboard?.instantiateViewControllerWithIdentifier("ShowUserProfileTableViewController") as! UINavigationController
case 0:
if (self.revealViewController().frontViewController.isKindOfClass(UINavigationController))
let nav : UINavigationController = self.revealViewController().frontViewController as! UINavigationController
if (!nav.viewControllers[0].isKindOfClass(ShowUserProfileTableViewController))
self.revealViewController().setFrontViewController(self._profile, animated: true)
else
self.revealViewController().setFrontViewController(self._profile, animated: true)
break
【问题讨论】:
您是否尝试过 prepareForSegue 功能? 不,我想在这个函数中传递参数。我写的代码? @ctabuyo 我不明白您的问题 - 您遇到的具体问题是什么?错误信息是什么?为什么prepareForSegue:sender:
不做你想做的事?您是否在 *** 上搜索过以前的类似问题 (***.com/q/7864371/558933)?
每次访问 (get)_profile
时,都会创建一个新实例。
【参考方案1】:
最简单的方法是使用segues并实现prepareForSegue
,如下所示:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
if segue.identifier == "ShowSecondViewController"
let navigationController = segue.destinationViewController as! UINavigationController
let targetViewController = navigationController.viewControllers.first as! SecondViewController
targetViewController.someString = "foo"
现在,假设
segue 的故事板标识符为ShowSecondViewController
;
目标视图控制器是一个导航控制器,其“根视图控制器”的基类为SecondViewController
;和
SecondViewController
有一些名为 someString
的属性。
显然,相应地更改这些标识符、类和属性名称,但这是基本方法。你要么以编程方式调用performSegueWithIdentifier
,要么只是在一些 UI 控件和下一个场景(导航控制器)之间进行切换。
【讨论】:
好吧@Rob我知道如何通过segue传递参数。但是我遇到了一个问题,我必须使用我共享的代码。我必须向您解释整个场景,然后为什么我需要该代码。所以这就是为什么我的问题是有可能以某种方式在我的代码中传递值 @hellosheikh - 是的,但那里似乎有很多问题和未解决的问题。首先,正如 vikingsegundo 指出的那样,每次访问该属性时,您都会实例化一个新的导航控制器,这似乎并不明智(如果这样做,您必须非常小心何时/如何使用该属性)。将导航控制器的实例化与将其添加到视图控制器层次结构中分离似乎是不谨慎的。 其次,您正在引用函数(例如revealViewController()
和 setFrontViewController()
),并且不清楚它们在做什么,因此很难就您的代码示例向您提供进一步的建议。此外,我们无法看到您在什么上下文中调用此 case 0
代码,因此很难理解您在做什么。您是在尝试在视图已经在视图层次结构中的视图控制器之间传递代码,还是在实例化视图控制器及其视图并尝试在那里传递数据。这是一个非常非典型的配置,因此很难理解您要做什么。以上是关于如何将值传递给第二个控制器的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3:如何动态加载图像并将变量传递给第二个视图控制器?
如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭