2012-03-15 49 views
2

我正在构建一个当前有3个ViewController的应用程序。其中一个在成功登录后使用,因此在此问题中不相关。从第二个ViewController回到第一个ViewController

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

第一个ViewController构建在我的'MainStoryboard'中。它在底部有一个登录表单和一个信息按钮。我做了我的AppDelegate链接起来里面didFinishLaunchingWithOptions如下:

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

因为我想迫使一个UIWebView(另一个故事)的渲染我编程方式创建第二个观点。

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

里面我的两个ViewControllers我设置到的appDelegate链接如下的:

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

我在我的第一个视图控制器的信息按钮,您可以到我里面didFinishLaunchingWithOptions以下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]; 

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

任何帮助非常感谢。

+0

我认为dismissModalViewController下面的答案是正确的。在附注中,你用[infoViewController视图]完成了什么; ??另外,您可以在创建时设置该控制器的转换样式。 – danh 2012-03-15 14:49:12

+0

嗨,我会稍后尝试下面的建议(我的午餐时间结束并回到我的PHP/JS日常工作)。 [infoViewController视图]字面上只是显示一个UIWebView,其中包含有关应用程序的一些信息。我怀疑也许你会认为我应该在第一个ViewController的另一个视图中显示这个信息?我只用了3-4周的时间来完成ObjC/iOS,所以我可能并不完全遵循最佳实践。 – 2012-03-15 14:54:31

+0

Gotcha,但视图只是ViewController的一个属性。这是由视图控制器管理的视图...不是动词,而是名词。我认为在你要求的时候它是零的。 (它可以在视图控制器第一次从一个nib加载时导致状态改变,这是首先执行视图的延迟加载,但通常不需要担心这个问题。 。尝试对该行进行评论,看看它是否行为不一致。 – danh 2012-03-15 17:45:06

回答

6

你可以做:

[self dismissModalViewControllerAnimated:YES]; 
+0

非常感谢:) – 2012-03-15 18:21:23

5

你应该使用这个。

[self dismissModalViewControllerAnimated:YES]; 
+0

非常感谢你:) – 2012-03-15 18:21:39

1

您应该使用主控制器来切换其他视图控制器。将根控制器的视图更改为其他视图控制器之一(如果需要,请照常应用动画)。在您的其他视图控制器中保留一个指向您的根控制器的指针,并致电self.rootController.view = <desired_controller_instance>.view

0

我认为您展示InfoViewController的方式是错误的。做到这一点的方式如下:

在您的视图控制器,创建信息按钮:

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

而在你InfoViewController一个动作,在按钮的作用应该带你回去写:

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

希望它有效。

0

此外,在呈现控制器,你可以使用这个

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

要dissmiss电流控制器。

相关问题