ios - 通过编程方式制作的 UINavigationController 不显示导航栏

标签 ios ios5 uinavigationcontroller

我有一个名为 navController 的导航 Controller ,在其 viewDidLoad 期间以编程方式在我的模态视图 Controller 中制作:

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

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

最佳答案

您的解决方案无法工作。

假设您的模态 Controller 名为 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];
}

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

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

一些注释

要了解 UINavigationController 的工作原理,请阅读 UINavigationController class reference

要了解模态 Controller 的工作原理,请阅读 Modal view controllers documentation

我提供的代码是一个简单的示例,仅具有说明性(我是手写的,因此请检查语法)。您需要注意内存管理以及如何呈现模态 Controller 。特别是,正如 Apple 文档所建议的,要呈现模态 Controller ,您需要遵循以下步骤:

  1. 创建您想要呈现的 View Controller 。

  2. 将 View Controller 的 modalTransitionStyle 属性设置为所需的值。

  3. 将委托(delegate)对象分配给 View Controller 。通常,委托(delegate)是呈现 View Controller 。呈现的 View Controller 使用委托(delegate)来通知呈现的 View Controller 何时准备好关闭。它还可以将其他信息传达回委托(delegate)人。

  4. 调用当前 View Controller 的presentViewController:animated:completion:方法,传入要呈现的 View Controller 。

  5. 触发(必要时)一些操作来关闭模态 Controller 。

希望有帮助。

关于ios - 通过编程方式制作的 UINavigationController 不显示导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023976/

相关文章:

ios - DismissViewControllerAnimated EXC_Bad_ACCESS 为真

ios - ReactiveCocoa 无法识别的选择器

ios5 - XCode 4.4 的 iOS PhoneGap ChildBrowser "data argument not used by format string"警告

objective-c - "Unlock to delete"编辑 subview

objective-c - 导航 Controller 问题

ios - Xcode4 中的项目组织

ios - SKScene 中的 UIPanGestureRecognizer

iOS - 当按下按钮时,如何让系统对我的服务器进行远程调用?

ios - 使用 UIAppearance 设置 UITableView 的背景颜色

ios - Swift popViewController 发送数据