Xcode 4.2&故事板,如何在视图之间传递数据?现有代码错误

时间:2012-03-12 19:43:07

标签: iphone ipad xcode4.2 storyboard

我正在尝试学习如何在视图之间传递数据。假设在第二个视图中设置标签,从第一个视图中输入的文本字段中输入文本。我基本上尝试在第二个视图中创建一个字符串,然后当从第一个视图切换到第二个视图时,我在第二个视图中设置了一个字符串。然后,当第二个视图加载它时,将标签的文本设置为相同的字符串。我转换之前和之后的NSLog,在它之前很好,但是当第二个视图加载它时,字符串被删除。我不确定为什么这不起作用。这是我的项目:http://www.mediafire.com/?83s88z5d06hhqb5

谢谢!

-Shredder2794

6 个答案:

答案 0 :(得分:2)

从我的书(http://www.apeth.com/iOSBook/ch19.html#_storyboards):

在执行segue之前,会发送源视图控制器prepareForSegue:sender:。视图控制器可以通过检查segue的标识符和destinationViewController属性来计算出触发的segue,并且发送者是被触发以触发segue的接口对象(或者,如果在代码中调用performSegueWithIdentifier:sender:,则无论如何object作为sender:参数提供。这是源视图控制器和目标视图控制器相遇的时刻;因此,源视图控制器可以在目标视图控制器上执行配置,传递数据等等。

(当然另一种解决方案是“不要使用故事板”。然后第一个视图控制器创建第二个,然后可以将数据交给那里。)

反向问题比较棘手;查看Utility Application模板以获取如何使用委托模式的示例。

答案 1 :(得分:1)

StoryBoards是现成的东西,你可以减少你写的很多代码。所以考虑控制器A& B在故事板上。 现在,为了将数据从A传递到B,您可以使用segue名称将其标识符连接起来,然后您可以在A中使用委托方法:

//在从A转换为B之前调用此方法。

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

    if ([[segue identifier] isEqualToString:@"THE IDENTIFIER YOU NAMED"])
    {

        id *objectOfController_B  = [segue destinationViewController];.
        objectOfController_B.lblTextDisplayOfA = //Something...
    }
}

现在您可以使用控制器A中的按钮显式转换它。

- (IBAction)buttonPressed:(id)sender
{
    [self performSegueWithIdentifier:@"THE IDENTIFIER YOU NAMED" sender:sender];
}

所以我猜你可以试试这个,你会得到它如何以及何时与segue发生转变。

希望这有帮助。

答案 2 :(得分:0)

看看这个:http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

委托模式是实现您要做的事情的常用方法。

答案 3 :(得分:0)

似乎有不止一些事情需要解释。我认为通过一些教程可以为您提供所需的答案。见http://www.raywenderlich.com/tutorials

答案 4 :(得分:0)

几个月前,我已经或多或少地问了同样的问题。有一些非常好的答案,尤其是来自zoul的答案,他们构建了一个演示项目,该项目将向您展示如何创建一个工厂模式应用程序,该应用程序将提供所需对象的视图。

我的问题可以在这里找到:iOS: Initialise object at start of application for all controllers to use并查看'zoul'的答案。它让我解决了这个问题=)

祝你好运试试=) 塞巴斯蒂安

答案 5 :(得分:0)

我花费了“无数个小时”,我试图找到一种方法来传递数据,理解代表们没有理解力,也没有什么成功。这段视频做了我检查过的所有其他参考文献没有做的事情:尽可能简单地清楚地展示所需要的内容。非常感谢Rob Smythe先生。 http://www.youtube.com/watch?v=XZWT0IV8FrI