我在viewDidLoad期间在我的模态视图控制器中以编程方式创建了一个名为navController的导航控制器:
self.navController = [[UINavigationController alloc] initWithRootViewController:self];
self.navController.view=self.view;
[self setView:self.navController.view];
但是当我启动模态视图控制器时,我没有看到导航栏,只是我在IB中制作的标准视图。怎么了?
答案 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文档所示,为了呈现模态控制器,您需要遵循以下步骤:
创建要显示的视图控制器。
将视图控制器的modalTransitionStyle属性设置为所需的值。
将委托对象分配给视图控制器。通常,委托是呈现视图控制器。所呈现的视图控制器使用该委托在准备好被解雇时通知呈现视图控制器。它还可以将其他信息传达给代表。
调用当前视图控制器的presentViewController:animated:completion:方法,传入要显示的视图控制器。
触发(必要时)一些解除模态控制器的动作。
希望它有所帮助。