使用 prepareForSegue 在视图控制器之间传递数据

Posted

技术标签:

【中文标题】使用 prepareForSegue 在视图控制器之间传递数据【英文标题】:Passing data between View Controllers using prepareForSegue 【发布时间】:2012-08-20 20:02:46 【问题描述】:

我正在尝试创建一个简单的项目来在我使用情节提要设置的两个视图控制器之间传递一些数据。

该项目非常简单 - 在第一页我有一个文本字段,然后一个按钮将用户带到第二个视图控制器,希望在其中显示文本,但到目前为止还没有运气。

我正在使用 Segue 的“模态”样式,这里是代码:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

ViewController2 *vc2;

vc2 = [segue destinationViewController];

vc2.label.text = textField.text;    

如果有人可以帮助我提供正确的代码并向我解释为什么我目前拥有的代码不起作用,我将不胜感激。我四处搜索,虽然关于如何做到这一点似乎有几种变化,但这对我来说似乎非常正确。

我大约两周前才从控制台迁移到 ios,所以请保持简单!

提前致谢!

【问题讨论】:

【参考方案1】:

您的问题(可能!)是destinationViewController 尚未在您尝试更新它的位置加载其视图层次结构。您可以通过以下方式验证这一点:

NSLog(@"Label: %@", vc2.label);

解决这个问题的方法是在ViewController2 中创建一个属性,它只是一个字符串,然后设置它。然后,当viewDidLoad:ViewController2 中执行时,将字符串属性复制到标签的文本中。

【讨论】:

效果很好,非常感谢!所以我想规则是在控件传递给新的视图控制器之前不要访问 GUI 的任何元素。再次感谢! 具体来说,直到viewDidLoad 执行。 (很高兴它有效!)【参考方案2】:

我知道它很难看,但尝试投射destinationviewcontroller。我已经尝试过了,它似乎有助于解决这种情况。

ViewController2 *vc2 = (ViewController *) [segue destinationviewcontroller];

另外,如果您使用故事板,您是否在 uinavigationcontroller 中?

【讨论】:

以上是关于使用 prepareForSegue 在视图控制器之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

使用导航控制器在“prepareForSegue”中设置数据

在没有 prepareForSegue 的情况下推送到另一个视图控制器

prepareForSegue 未在嵌入式 segue 中调用

当 segue 即将执行到另一个视图控制器时,prepareForSegue 是不是会通知视图控制器?

来自一个视图控制器的两个segue,prepareForSegue

prepareForSegue 在 iOS 7 上无法获取目标视图控制器