我的故事板控制器: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];
}
答案 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
你需要准备很多细胞......你需要用同样的方法做所有这些。
按名称识别segue>准备方法