Iphone 不使用导航控制器切换视图控制器

Iphone 不使用导航控制器切换视图控制器,iphone,ios,ios6,uiviewcontroller,uinavigationcontroller,Iphone,Ios,Ios6,Uiviewcontroller,Uinavigationcontroller,我相信这个问题已经被问过无数次了,我也看到过类似的问题,尽管我仍然找不到答案 我有一个具有多个视图控制器的应用程序,作为一个好的视图控制器,它可以完成自己的任务。然而,我发现自己陷入了无法从一个视图控制器切换到另一个视图控制器的困境。我见过很多人说“使用导航控制器”,但这不是我想要使用的,因为不需要的视图元素是视图控制器的一部分 我做了以下工作,但成效有限。视图控制器已切换,但视图未加载,取而代之的是一个空视图: - (IBAction)showLogin:(id)sender { PP

我相信这个问题已经被问过无数次了,我也看到过类似的问题,尽管我仍然找不到答案

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

我做了以下工作,但成效有限。视图控制器已切换,但视图未加载,取而代之的是一个空视图:

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

使用
UINavigationController
作为
rootViewController
是创建iOS应用程序的好方法

据我所知,不需要的视图元素是导航栏吗?您只需手动隐藏它,设置:

[self.navigationController setNavigationBarHidden:YES];
关于您的案例,如果您想更改当前的viewController(针对iOS 6),您可以只演示一个新的:

[self presentViewController:login animated:YES completion:nil];
或添加子项(:

为什么要将UINavigationController设置为根

1) 首先,它使您的应用程序可见,视图控制器结构良好。(尤其是在iPhone上)。您始终可以获取堆栈,并将其弹出(或移动)到所需的任何viewController

2) 为什么我总是将导航设置为根目录,因为它使应用程序更受支持,因此在应用程序中添加一些功能不会花费太多的代码更改


如果创建一个(根)viewcontroller,其中包含很多子对象,或者显示其他viewcontrolls,则会使代码很难支持,并生成类似gode object的内容

听乔治说,你的导航控制器是正确的选择。你不想使用它的理由是无效的

但是,代码无法工作的原因可能与将rootViewController设置为登录vc后不必要的行有关


根据,设置rootViewController会自动将窗口的视图设置为视图控制器的视图

什么是“不需要的视图元素”?导航栏是unwante我想你的意思是setNavigationBarHidden:是的,但是为什么这是一件好事?导航控制器没有太多意义(我可能错了),它应该用于导航子视图而不是整个视图控制器。@codejam导航控制器的唯一目的是在整个视图控制器之间导航
[self addChildViewController:login];