5

我敢肯定,这个问题已经被问过无数次了,我也看到过类似的问题,尽管答案仍然让我难以捉摸。

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

我已经完成了以下工作并且取得了有限的成功。视图控制器已切换,但视图未加载,我得到一个空视图:

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

2 回答 2

14

使用UINavigationControlleras arootViewController是创建 iOS 应用程序的好基调。

据我了解,不需要的视图元素是导航栏?您可以手动隐藏它,设置:

[self.navigationController setNavigationBarHidden:YES];

关于你的情况,如果你想改变你当前的 viewController(针对 iOS 6),你可以提出一个新的:

[self presentViewController:login animated:YES completion:nil];

或添加孩子(这是添加和删除孩子的好例子)

[self addChildViewController:login];

为什么要将 UINavigationController 设置为 root?

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

2)为什么我总是将导航作为根导航,因为它使应用程序更加supportable丰富,因此向应用程序添加一些功能不会花费太多代码更改。

如果你创建一个(根)viewcontroller 有很多孩子,或者它呈现其他viewcontroll,它会让你的代码很难支持,并产生类似gode-object的东西。

于 2013-08-25T15:01:38.373 回答
1

听乔治,UINavigationController 是要走的路。你不想使用它的理由是无效的。

但是,您的代码不起作用的原因可能与将 rootViewController 设置为登录 vc 后不必要的行有关。

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

于 2013-08-25T15:54:40.383 回答