iOS:容器视图 - 在子控制器中外部调用prepareForSegue

时间:2013-10-22 03:21:31

标签: ios storyboard segue container-view

在以下设置中,Button 1拨打First VCButton 2来电Second VC

enter image description here

目前,我使用以下代码通过点按SecondVC来致电Button 2

MainVC.m

@implementation MainVC()
....

UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
SecondVC *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];
[navController pushViewController:secondVC animated:YES];

上面的代码显示SecondVC就好了。但是,在First VC中有一些语句需要在“第二个VC”出现之前执行,这些语句被跳过!

我在First VC-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender执行这些语句。在Next中点按First VC按钮后,所有语句都会执行,因为它会在呈现prepareForSegue之前触发SecondVC。使用上面的代码时会跳过此步骤。

额外信息:
A)虽然我的应用中的Navigation ControllerMain VC未在我的应用中显示导航栏。我相信这会对抗HIG在iPhone上显示两个导航栏。我在这里展示了识别主VC B)用户填写的FirstVC中有textFields。如果我只是复制代码,它会从textFields.text中读取并保存数据吗?

问题:在prepareForSegue点击First VC时,如何从Button 2致电MainVC?还是有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

UINavigationController *navController = [[self childViewControllers] objectAtIndex:0];
UIViewController *vc = [navController topViewController]
if ([vc isKindOfClass:[FirstVC class]]) {
    FirstVC *firstVC = (FirstVC *)vc;
    SecondVC *secondVC = [[self storyboard] instantiateViewControllerWithIdentifier:@"second"];
    // Copy and read data from [[firstVC textField] text] to secondVC.
    [navController pushViewController:secondVC animated:YES];
}