我确信这已经被无数次询问了,虽然答案仍然没有找到,但我已经看到了类似的问题。
我有一个带有多个视图控制器的应用程序,并且一个好的视图控制器可以完成自己的任务。但是我发现自己陷入了困境,我无法从一个视图控制器切换到另一个视图控制器。我见过很多人说“使用导航控制器”,但这不是我想要使用的,因为不需要的视图元素是视图控制器的一部分。
我做了以下事情并取得了有限的成功。视图控制器已切换,但视图未加载,我得到一个空视图:
- (IBAction)showLogin:(id)sender
{
PPLoginViewController *login = [[PPLoginViewController alloc] initWithNibName:@"PPLoginViewController" bundle:nil];
PPAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
appDelegate.window.rootViewController = login;
[self.view insertSubview:login.view atIndex:0];
}
答案 0 :(得分:13)
将UINavigationController
用作rootViewController
是创建iOS应用程序的良好基调。
据我了解不受欢迎的视图元素是一个navigationBar?你可以手动隐藏它,设置:
[self.navigationController setNavigationBarHidden:YES];
关于你的情况,如果你想改变你当前的viewController(针对iOS 6),你可以只提出一个新的:
[self presentViewController:login animated:YES completion:nil];
或添加子(Here is nice example to add and remove a child):
[self addChildViewController:login];
为什么要将UINavigationController设置为root?
1)首先,它使您的应用程序可见的viewcontrollers结构良好。 (特别是在iPhone上需要它)。您可以随时获取堆栈并弹出(或移动)到您想要的任何viewController。
2)为什么我总是将导航作为根导航,因为它使应用程序更加supportable
,因此,为应用程序添加一些功能将花费更少的代码更改。
如果你创建一个包含很多子节点的(root)视图控制器,或者显示其他视图控件,它将使你的代码真的很难支持,并使像gode-object这样的东西。
答案 1 :(得分:1)
听听George,UINavigationController是要走的路。您不想使用它的原因无效。
但是,在将rootViewController设置为login vc之后,代码不起作用的原因可能与不必要的行有关。
Per Apple's documentation,设置rootViewController会自动将窗口视图设置为视图控制器的视图。