我有一个名为 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];
}
现在,在 ModalViewController
的 viewDidLoad
中,您可以访问 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 ,您需要遵循以下步骤:
创建您想要呈现的 View Controller 。
将 View Controller 的 modalTransitionStyle 属性设置为所需的值。
将委托(delegate)对象分配给 View Controller 。通常,委托(delegate)是呈现 View Controller 。呈现的 View Controller 使用委托(delegate)来通知呈现的 View Controller 何时准备好关闭。它还可以将其他信息传达回委托(delegate)人。
调用当前 View Controller 的presentViewController:animated:completion:方法,传入要呈现的 View Controller 。
触发(必要时)一些操作来关闭模态 Controller 。
希望有帮助。
关于ios - 通过编程方式制作的 UINavigationController 不显示导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023976/