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

时间:2014-07-15 08:56:48

标签: ios objective-c ios7 delegates xcode5

我的故事板控制器: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 个答案:

答案 0 :(得分:0)

我猜你有这些viewcontrollers的类

MenuViewController.h, MenuViewController.m

ChooseViewControler.h, ChooseViewControler.m

MapViewController.h, MapViewController.m

EditViewController.h, EditViewController.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

enter image description here

你需要准备很多细胞......你需要用同样的方法做所有这些。

按名称识别segue>准备方法