从第二个ViewController回到第一个ViewController

我正在构build一个当前有3个ViewController的应用程序。 其中一个在成功login后使用,因此在这个问题中不相关。

当我发现故事板不给我需要的精细控制时,我正在使用故事板的混合物,并以编程方式构build事物。

第一个ViewController是build立在我的“MainStoryboard”。 它有一个login表单和一个信息button在底部。 我通过在didFinishLaunchingWithOptions中执行以下步骤将其链接到我的AppDelegate:

ViewController *viewController = (ViewController *)self.window.rootViewController; 

因为我想强制渲染一个UIWebView(另一个故事),我编程创build第二个视图。 我在didFinishLaunchingWithOptions中执行以下操作:

 infoViewController = [[InfoViewController alloc] init]; [infoViewController view]; 

在我的两个ViewController中,我设置了一个到appDelegate的链接,如下所示:

 appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

我有一个信息button在我的第一个ViewController,把你带到infoViewController。 点击时会调用以下代码:

 appDelegate.infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:appDelegate.infoViewController animated:YES]; 

上面的工作对我来说很好,在屏幕上翻转并显示InfoViewController。

在我的InfoViewController上,我有一个button,应该带你回到login页面,我已经尝试了各种各样的工作,但它只是崩溃我的应用程序。 似乎没有任何工作。 我已经尝试了以下内容:

 appDelegate.viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:appDelegate.viewController animated:YES]; 

 [self.navigationController popToRootViewControllerAnimated:YES]; 

 [self.navigationController popViewControllerAnimated:YES]; 

 [self.navigationController popToViewController:appDelegate.viewController animated:YES]; 

我怀疑,当你有一个导航视图控制器,你想回到根目录时,最后3个可能更多? 我不确定,但无论如何,这是行不通的。 我曾经使用故事板以前的工作,所以我相信它应该是容易的! 如上所述,我切换到以编程方式制作infoViewController,以便在视图出现之前强制UIWebView呈现。

任何帮助非常感谢。

你可以这样做:

 [self dismissModalViewControllerAnimated:YES]; 

你应该使用这个。

 [self dismissModalViewControllerAnimated:YES]; 

您应该使用主控制器在其他视图控制器之间进行切换。 将根控制器的视图更改为其他视图控制器之一(如果需要,请照常应用animation)。 在你的其他视图控制器中保存一个指向你的根控制器的指针,并调用self.rootController.view = <desired_controller_instance>.view

我想你展示你的InfoViewController的方式是错误的。 这样做的方式如下:

在您的ViewController中,为信息button创build一个操作:

 - (IBAction)infoButtonTapped:(id)sender { InfoViewController *infoViewController = [[InfoViewController alloc] init]; infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:infoViewController animated:YES]; } 

而在你的InfoViewController中,你的button的动作应该带你回写:

 - (void)takeBackToViewController { [self dismissModalViewControllerAnimated:YES]; } 

希望它的作品。

在现有的控制器中,你也可以使用它

 if(self.parentViewController) [self.parentViewController dismissModalViewControllerAnimated:YES]; else [self.presentingViewController dismissModalViewControllerAnimated:YES]; 

消除电stream控制器。