如何使用委托将数据从多个视图控制器传递回根视图控制器? IOS 7

Posted

技术标签:

【中文标题】如何使用委托将数据从多个视图控制器传递回根视图控制器? IOS 7【英文标题】:How to pass data back from multiple view controllers to root view controller using delegate? Ios 7 【发布时间】:2014-07-15 08:56:47 【问题描述】:

我的故事板控制器:http://i.stack.imgur.com/4LBEd.png

MenuViewController -> ChooseViewControler -> MapViewController 和 EditViewController。

我需要将名为地址的变量从 MapViewController 或 EditViewController 传递给 MenuViewController。我该如何实现?

我尝试使用委托,来自这个答案Passing Data between View Controllers 但不明白,在我们将其推送到导航堆栈之前,如何告诉 MapViewController 或 EditViewController MenuController 是它的委托。

我在 EditVC 做这件事,而且效果很好:

- (IBAction)OkButton:(id)sender 

    NSString *address = addressInput.text;
    MenuTableViewController *menuVC =
    [self.navigationController.viewControllers objectAtIndex:0];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    UITableViewCell *cell = [prevVC.tableView cellForRowAtIndexPath:indexPath];
    cell.textLabel.text = address;

    [self.navigationController popToViewController:menuVC animated:YES];


【问题讨论】:

【参考方案1】:

我猜你有这些视图控制器的类

MenuViewController.h, MenuViewController.m

选择ViewControler.h, 选择ViewControler.m

MapViewController.h, MapViewController.m

EditViewController.h, 编辑视图控制器.m

当您以编程方式(performSegue 方法)或在导航控制器中使用推送或模型执行 segue 时,会调用此方法 -PrepareForSegue

在您的源 ViewController (VC) 上实现这一点,即,如果您从 MapViewController 传递到 EditViewController , 在 MapViewController 的 .m 文件中实现这一点

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

    if([segue.identifier isEqualToString:@"toEditViewController"])
    
        EditViewController *destinationVC=(EditViewController*)segue.destinationViewController;
        destinationVC.address=self.address;
    


请注意,您必须在故事板中识别由其名称调用的segue

你需要准备更多的转场……你需要用同样的方法完成所有这些。

按名称识别segue>准备方法

【讨论】:

感谢您的回答。我认为 segues 仅用于推动数据向前发展。 你也可以传回去 @user3840005 如果您从editVC更改地址,它将反映在 MapViewController.address 的对象中 嗯。当我将 editVC buttonOk 中的 push segue 添加到 MenuVC 时,它破坏了所有导航栏。 你不需要在这里执行segue。您想要做的是回到导航堆栈中的前一个视图控制器,对吗?所以你必须弹出视图控制器并返回。您可以手动触发导航返回按钮.. 或者只是弹出视图控制器。

以上是关于如何使用委托将数据从多个视图控制器传递回根视图控制器? IOS 7的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 3中从一个视图控制器传递到上一个视图控制器时设置委托?

UINavigationController - 检测何时导航回根视图控制器

如何将 JSON 数据从登录视图传递到多个视图控制器,是不是可能?

在具有委托的视图控制器之间传递多个值

响应者链但不是委托属性将值从容器传递回视图控制器

使用委托从按钮传递信息以突出显示单元格