从第二个ViewController回到第一个ViewController
我正在构建一个当前有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进行渲染。
任何帮助非常感谢。
你可以做:
[self dismissModalViewControllerAnimated:YES];
非常感谢:) – 2012-03-15 18:21:23
你应该使用这个。
[self dismissModalViewControllerAnimated:YES];
非常感谢你:) – 2012-03-15 18:21:39
您应该使用主控制器来切换其他视图控制器。将根控制器的视图更改为其他视图控制器之一(如果需要,请照常应用动画)。在您的其他视图控制器中保留一个指向您的根控制器的指针,并致电self.rootController.view = <desired_controller_instance>.view
我认为您展示InfoViewController的方式是错误的。做到这一点的方式如下:
在您的视图控制器,创建信息按钮:
- (IBAction)infoButtonTapped:(id)sender
{
InfoViewController *infoViewController = [[InfoViewController alloc] init];
infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:infoViewController animated:YES];
}
而在你InfoViewController一个动作,在按钮的作用应该带你回去写:
- (void)takeBackToViewController
{
[self dismissModalViewControllerAnimated:YES];
}
希望它有效。
此外,在呈现控制器,你可以使用这个
if(self.parentViewController)
[self.parentViewController dismissModalViewControllerAnimated:YES];
else
[self.presentingViewController dismissModalViewControllerAnimated:YES];
要dissmiss电流控制器。
我认为dismissModalViewController下面的答案是正确的。在附注中,你用[infoViewController视图]完成了什么; ??另外,您可以在创建时设置该控制器的转换样式。 – danh 2012-03-15 14:49:12
嗨,我会稍后尝试下面的建议(我的午餐时间结束并回到我的PHP/JS日常工作)。 [infoViewController视图]字面上只是显示一个UIWebView,其中包含有关应用程序的一些信息。我怀疑也许你会认为我应该在第一个ViewController的另一个视图中显示这个信息?我只用了3-4周的时间来完成ObjC/iOS,所以我可能并不完全遵循最佳实践。 – 2012-03-15 14:54:31
Gotcha,但视图只是ViewController的一个属性。这是由视图控制器管理的视图...不是动词,而是名词。我认为在你要求的时候它是零的。 (它可以在视图控制器第一次从一个nib加载时导致状态改变,这是首先执行视图的延迟加载,但通常不需要担心这个问题。 。尝试对该行进行评论,看看它是否行为不一致。 – danh 2012-03-15 17:45:06