【问题标题】:iOS passing data across multiple controllersiOS 跨多个控制器传递数据
【发布时间】:2015-02-04 04:32:49
【问题描述】:

我是 iOS 应用开发的新手。

我现在有几个视图,如下图所示(并非完全如此),其中我可以通过第一个视图的 2 个后续 segues 到达第三个视图(最右边)。

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

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

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

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

【问题讨论】:

  • 您想将数据从第三个发送到第一个?
  • @AbubakrDar 是的,我必须从第三个获取一些数据,然后将其传回第一个,而不经过第二个。
  • 在目前的情况下,我认为委托回调是最合适的,但是如果您需要保持整个系统的状态,那么单例也可以工作,这完全取决于您,所有取决于问题
  • 什么样的数据?可能有不同的设计方法。
  • 您可以采用任何给定的方法,但请避免仅将 _singleton 用于此目的。

标签: ios objective-c iphone segue


【解决方案1】:

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

  • 委托是将数据传回给您的孩子的一种方式。
  • 块是另一种非常简单的方法。
  • 也可以使用通知。
  • Unwind segue 是一个新的补充
  • 我建议最后使用 Singleton。

【讨论】:

    【解决方案2】:

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

      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";
      }];
    

    【讨论】:

      【解决方案3】:

      查看本题的正确答案:

      Passing Data between View Controllers

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

      - (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.
      }  }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-09
        • 2020-12-25
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 2015-02-20
        相关资源
        最近更新 更多