从UIViewController加载UINavigationController作为子视图

Xco*_*Mi2 7 iphone objective-c subview uiview uinavigationcontroller

我是iPhone开发的新手.我想构建一个首先拥有UIViewController的应用程序,它将有一个按钮.现在点击按钮,它会加载UINavigation控制器.这是我接近的方式:

  1. 我创建了一个UIViewController类,我拿了一个

    -(IBAction) PressMeFunc:(id) sender
    
    Run Code Online (Sandbox Code Playgroud)

    按下按钮.

  2. 然后我创建了一个UIView xib文件.我在IB中完成了所需的步骤.

  3. 然后在AppDelegate中,我将ViewController的实例添加为窗口的子视图.

这可以.

接下来,如何在按下按钮时加载导航控制器?

我知道如何从基于窗口的应用程序构建一个navigationController项目,但我很难将NavigationController作为UIView的子视图.

非常感谢您的帮助.

Mar*_*sey 8

NavigationController设计用于在使用时接管屏幕,因此您必须决定如何从原始ViewController管理到NavigationController的过渡.您可以使用presentModalViewController执行此操作,或者通过处理删除原始视图并以编程方式交换NavigationController.

这是用于以编程方式设置NavigationController 的Apple文档.

代码看起来像这样(来自Apple的文档):

GroupsController *groupsController = [[[GroupsController alloc] initWithNibName:nil bundle:nil] autorelease];
UINavigationController *navigationController =
[[UINavigationController alloc] initWithRootViewController:groupsController];
Run Code Online (Sandbox Code Playgroud)

现在,一旦你创建了NavigationController,并将第一个viewcontroller添加到它,你需要转换到它.您可以使用CATransitions或使用

[myViewController presentModalViewController: navigationController];
Run Code Online (Sandbox Code Playgroud)

  • 这是Apple的耻辱,除非你只将uinavigationcontroller添加到主窗口,否则会出现很多问题,他们至少可以在文档中做一个说明 (2认同)

Zak*_*man 5

您不应将UIViewController(包括导航)视图作为子视图添加到由另一个视图控制器管理的视图.

以下是相关内容:http: //blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

在您的情况下,您可以做的是从窗口中删除viewcontroller的视图,然后将导航控制器的视图添加到窗口.

[viewController.view removeFromSuperview];
[window addSubview:navigationController.view];
Run Code Online (Sandbox Code Playgroud)

您也可以将其添加为此处建议的模态视图控制器,或者您可以将第一个视图控制器设置为导航控制器,并在该导航控制器的堆栈上按下第二个导航控制器:

[navigationController pushViewController:secondNavigation animated:NO];
Run Code Online (Sandbox Code Playgroud)

编辑:嘿刚刚注意到我正在回答09问题

编辑#2:这可能与iOS 5和他们添加的UIViewController包含事物无关,仍然没有机会检查出来,但如果你正在阅读这个答案,你可能想要.

  • 回答+1,回答'09问题+10!:) (2认同)