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

时间:2012-01-26 19:23:18

标签: ios ios5 uinavigationcontroller

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

self.navController = [[UINavigationController alloc] initWithRootViewController:self];
self.navController.view=self.view;
[self setView:self.navController.view];

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

1 个答案:

答案 0 :(得分:5)

您的解决方案无效。

假设您的模态控制器名为ModalViewController。这是一个与xib创建的界面链接的简单UIViewController

现在,在某些时候,您需要以模态方式呈现ModalViewController。正如您在规范中所写,我认为您还想使用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];
}

现在,在您viewDidLoad的{​​{1}}内,您可以访问navigationController属性。通过这种方式,您可以控制ModalViewController行为。例如:

navigationController

一些注释

要了解- (void)viewDidLoad { [super viewDidLoad]; // the code changes the title for the navigation bar associated with the UINavigationController self.title = @"Set from ModalViewController"; } 的工作原理,请阅读UINavigationController class reference

了解模态控制器如何工作阅读Modal view controllers documentation

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

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

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

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

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

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

  6. 希望它有所帮助。