导航栏没有以编程方式制作的UINavigationController显示

jfi*_*isk 2 uinavigationcontroller ios ios5

我在viewDidLoad期间在我的模态视图控制器中以编程方式创建了一个名为navController的导航控制器:

self.navController = [[UINavigationController alloc] initWithRootViewController:self];
self.navController.view=self.view;
[self setView:self.navController.view];
Run Code Online (Sandbox Code Playgroud)

但是当我启动模态视图控制器时,我看不到导航栏,只是我在IB中制作的标准视图.怎么了?

Lor*_*o B 5

您的解决方案无法运作.

假设您调用了模态控制器ModalViewController.它是一个简单的UIViewController链接与xib创建的接口.

现在,在某些时候你需要以ModalViewController模态方式呈现.正如您在规范中所写的那样,我认为您还想使用a UINavigationController并控制其导航栏.

执行此操作的代码可以是以下内容,其中presentModally可能是未包含的方法ModalViewController.

- (void)presentModally:(id)sender {

   ModalViewController *modalController = [[ModalViewController alloc] initWithNibName:@"ModalView" bundle:nil]; 

   // Create the navigation controller and present it.
   UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:modalController];

   [self presentViewController:navigationController animated:YES completion: nil];
}
Run Code Online (Sandbox Code Playgroud)

现在,中viewDidLoadModalViewController可以访问navigationController属性.通过这种方式,您可以控制navigationController行为.例如:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // the code changes the title for the navigation bar associated with the UINavigationController
    self.title = @"Set from ModalViewController";
}
Run Code Online (Sandbox Code Playgroud)

一些笔记

要了解如何UINavigationController工作阅读UINavigationController类的引用

要了解模态控制器的工作原理,请阅读Modal视图控制器文档

我提供的代码是一个简单的例子,只是说明(我手写,所以检查语法).您需要注意内存管理以及如何呈现模态控制器.特别是,正如Apple文档所示,要呈现模态控制器,您需要按照以下步骤操作:

  1. 创建要显示的视图控制器.

  2. 将视图控制器的modalTransitionStyle属性设置为所需的值.

  3. 将委托对象分配给视图控制器.通常,委托是呈现视图控制器.所呈现的视图控制器使用该委托在准备好被解雇时通知呈现视图控制器.它还可以将其他信息传达给代表.

  4. 调用presentViewController:animated:completion:当前视图控制器的方法,传入要显示的视图控制器.

  5. 触发(必要时)一些动作来解除模态控制器.

希望能帮助到你.