在没有导航控制器的情

时间:2013-08-25 14:52:46

标签: iphone ios ios6 uiviewcontroller uinavigationcontroller

我确信这已经被无数次询问了,虽然答案仍然没有找到,但我已经看到了类似的问题。

我有一个带有多个视图控制器的应用程序,并且一个好的视图控制器可以完成自己的任务。但是我发现自己陷入了困境,我无法从一个视图控制器切换到另一个视图控制器。我见过很多人说“使用导航控制器”,但这不是我想要使用的,因为不需要的视图元素是视图控制器的一部分。

我做了以下事情并取得了有限的成功。视图控制器已切换,但视图未加载,我得到一个空视图:

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

2 个答案:

答案 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会自动将窗口视图设置为视图控制器的视图。