我正在尝试学习如何在视图之间传递数据。假设在第二个视图中设置标签,从第一个视图中输入的文本字段中输入文本。我基本上尝试在第二个视图中创建一个字符串,然后当从第一个视图切换到第二个视图时,我在第二个视图中设置了一个字符串。然后,当第二个视图加载它时,将标签的文本设置为相同的字符串。我转换之前和之后的NSLog,在它之前很好,但是当第二个视图加载它时,字符串被删除。我不确定为什么这不起作用。这是我的项目:http://www.mediafire.com/?83s88z5d06hhqb5
谢谢!
-Shredder2794
答案 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)
我的问题可以在这里找到:iOS: Initialise object at start of application for all controllers to use并查看'zoul'的答案。它让我解决了这个问题=)
祝你好运试试=) 塞巴斯蒂安
答案 5 :(得分:0)
我花费了“无数个小时”,我试图找到一种方法来传递数据,理解代表们没有理解力,也没有什么成功。这段视频做了我检查过的所有其他参考文献没有做的事情:尽可能简单地清楚地展示所需要的内容。非常感谢Rob Smythe先生。 http://www.youtube.com/watch?v=XZWT0IV8FrI