iOS跨多个控制器传递数据

时间:2015-02-04 04:32:50

标签: ios objective-c iphone segue

我是iOS应用开发的新手。

我现在有几个视图,如下图所示(不完全是这种情况),我可以通过第一个视图中的2个后续segue到达第三个视图(最右边)。

编辑:补充信息: 第三个视图实际上链接到第二个视图中的容器。它是从第一个到第二个的模态segue。

enter image description here

在第三个视图中,我有一个按钮,可以通过dismissViewControllerAnimated:completion:方法将我带回第一个视图。但是我怎么能把一些数据传回第一个视图呢?

我只知道如何使用prepareForSegue:sender:之类的方法在相邻视图之间传递数据。但是,我不确定如何在多个视图中执行此操作。

我应该使用Delegates还是Singleton还是有其他更好的选择? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

有以下方法可以做到这一点。

  • 代表是将数据传递给您孩子的一种方式。
  • 块是另一种非常简单的方法。
  • 也可以使用通知。
  • Unwind segue是此
  • 的新增功能
  • 我会在最后建议Singleton。

答案 1 :(得分:0)

假设您要传输一些字符串。您可以传递这样的数据:

  UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
   ViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"vc"];
    controller.string = "some string";
    [self presentViewController:controller animated:YES completion:nil];

如果您想要回到上一个视图控制器,那么您可以使用完成处理程序:

  ViewController *vc = (ViewController*)self.presentingViewController;
 [self dismissViewControllerAnimated:YES completion:^{
    vc.string = @"some string";
  }];

答案 2 :(得分:0)

请参阅此问题的正确答案:

Passing Data between View Controllers

这个问题经常被问到,记住你也可以使用第三个到第一个viewController的Unwind segue并使用:

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

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

 //Pass the data here with the methods that suggest 
 //in the correct answer I've linked you.
}  }