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

如何使用委托将数据从多个视图控制器传递回根视图控制器?Ios 7,ios,objective-c,ios7,delegates,xcode5,Ios,Objective C,Ios7,Delegates,Xcode5,我的故事板控制器: 菜单ViewController->选择ViewController->MapViewController和EditViewController 我需要将名为address的变量从MapViewController或EditViewController传递到MenuViewController。我如何实现这一点 根据这个答案,我试着使用delegate 但我不明白,在我们将MenuController推送到导航堆栈之前,如何告诉MapViewController或EditVi

我的故事板控制器:

菜单ViewController->选择ViewController->MapViewController和EditViewController

我需要将名为address的变量从MapViewController或EditViewController传递到MenuViewController。我如何实现这一点

根据这个答案,我试着使用delegate 但我不明白,在我们将MenuController推送到导航堆栈之前,如何告诉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];

}

我猜这些视图控制器的类是

MenuViewController.h, MenuViewController.m

选择iewcontroller.h, 选择iewcontroller.m

MapViewController.h, MapViewController.m

EditViewController.h, EditViewController.m

当您以编程方式(performsgue方法)或使用导航控制器中的推送或模型执行序列时,会调用名为-prepareforsgue的方法

在源代码ViewController(VC)ie上实现这一点,如果您从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;
    }

}
请注意,您必须识别序列图像板中以其名称命名的序列

你需要准备更多的环节……你需要用同样的方法来完成所有这些


按名称识别序列>准备方法

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