在iOS5中使用Storyboard时,如何将数据从一个文本字段传递到另一个文本字段?

时间:2012-02-17 17:24:02

标签: iphone ios xcode ios5

我第一次使用故事板,我无法弄清楚我在这里做错了什么......我有一个按钮,使用StoryBoards从一个视图控制器转换到另一个视图控制器(第二个视图以模态方式呈现)。

我正在尝试使用“准备segue”,以便将文本字段的值从视图1传递到视图2,但它无法正常工作。谁能告诉我这里有什么问题??

查看1:

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

    if ([[segue identifier] isEqualToString:@"saveGame"]) {

        statsViewController *svc = (statsViewController *)[segue destinationViewController];
        [svc setStatsTextField:gameTextField];
    }  
}

如果还有其他代码我可以发帖澄清请告诉我。

(对于记录没有错误,视图2上的文本字段不会更新。)

2 个答案:

答案 0 :(得分:3)

您不能只将一个视图控制器中的文本字段分配给另一个视图控制器中的属性。这对于第二个视图控制器视图中实际存在的文本字段没有任何作用。相反,您必须为文本字段的text属性分配值。 (理想情况下,此值不应直接来自其他文本字段,因为您不应使用视图来存储应用程序的数据。每当文本字段更新时,您应将更新的值存储在视图控制器或模型中的变量中。)

此外,由于目标视图控制器的视图尚未加载,因此在执行此代码时statsTextField尚不存在。您应该在statsViewController中声明一个单独的字符串属性(类名应以大写字母btw开头),然后在viewDidLoad中指定文本字段的值。

答案 1 :(得分:2)

由于视图尚未加载,因此该文本字段可能为零。您可以通过将代码包装在if语句中来强制执行此操作(因为它即将发生,所以没有问题!):

if (svc.view)
    svc.textfield.text = @"Hello";

访问视图属性会强制视图控制器加载视图(如果视图尚不存在)。

我注意到你似乎将整个textfield对象而不是字符串传递给text属性 - 这似乎不是一个好主意。它应该更像我上面的例子。