从第二个ViewController返回第一个ViewController

时间:2012-03-15 14:26:28

标签: objective-c ios xcode uiviewcontroller

我正在构建一个目前有3个ViewControllers的应用。其中一个在成功登录后使用,因此与此问题无关。

当我发现故事板不能给我提供我需要的精细控制时,我正在使用故事板和编程方式构建的东西。

第一个ViewController构建在我的'MainStoryboard'中。它有一个登录表单和底部的信息按钮。我通过在 didFinishLaunchingWithOptions 中执行以下操作将其链接到我的AppDelegate:

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

因为我想强制渲染UIWebView(另一个故事),所以我以编程方式创建了第二个视图。我在 didFinishLaunchingWithOptions

中执行以下操作
infoViewController = [[InfoViewController alloc] init];
[infoViewController view];

在我的两个ViewControllers中,我设置了一个指向appDelegate的链接,如下所示:

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

我的第一个ViewController中有一个信息按钮,可以将您带到infoViewController。它在点击时调用以下代码:

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

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

在我的InfoViewController上,我有一个按钮,可以带你回到登录页面,我已经尝试过各种各样的方法让它工作但它只是崩溃了我的应用程序。似乎没什么用。我尝试过以下方法:

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];

我怀疑当你有一个导航视图控制器并且你想回到root时,最后3个可能更多吗?我不确定,但无论哪种方式都不起作用。我以前使用故事板工作,所以我相信它应该很容易!如上所述,我转而以编程方式创建infoViewController,以便在视图出现之前强制UIWebView呈现。

任何帮助都非常感激。

5 个答案:

答案 0 :(得分:6)

你可以这样做:

[self dismissModalViewControllerAnimated:YES];

答案 1 :(得分:5)

你应该使用它。

[self dismissModalViewControllerAnimated:YES];

答案 2 :(得分:1)

您应该使用主控制器在其他视图控制器之间切换。将根控制器的视图更改为其他视图控制器之一(如果需要,可以照常应用动画)。在其他视图控制器中按住指向根控制器的指针,然后调用self.rootController.view = <desired_controller_instance>.view

答案 3 :(得分:0)

我认为你呈现InfoViewController的方式是错误的。按照以下方式进行:

在ViewController中,为信息按钮创建一个操作:

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

在你的InfoViewController中,在你的按钮的动作中,你应该把它写回来:

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

希望它有效。

答案 4 :(得分:0)

同样在呈现的控制器中,您可以使用此

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

关闭当前控制器。