ABPersonViewController以模态方式呈现UINavigationController

时间:2014-01-27 20:56:28

标签: ios objective-c ios7 uinavigationcontroller

我的问题的实际解决方案是以模态方式呈现一个UINavigationController,顶部有一个UINavigationBar,包含一个标题和一个标题为@“Done”的左侧栏按钮,它将关闭模态UINavigationController。

无论出于何种原因,我都无法弄清楚如何成功实现这一点。我知道这不是UINavigationController的传统用法,我确信这是一个简单的解决方案,但我无法弄明白。

我试过的是:

ABPersonViewController *personVC = [ABPersonViewController personControllerWithCard:card];

personVC.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(ClosePeoplePicker)];

testerVCF = [[UINavigationController alloc]  initWithRootViewController:personVC];

[self presentViewController:testerVCF animated:TRUE completion:^
{
    NSLog(@"Completed");
}];

当我执行此代码时,会显示一个UINavigationController但没有标题且没有完成按钮。

你有什么建议吗?我只是不认为我正在考虑UINavigationContoller的运作方式。

提前致谢。

2 个答案:

答案 0 :(得分:2)

问题是你正在设置导航控制器的barButton项目,并且标题位于错误的位置。你应该做的是

  • 在personVC的viewWillAppear方法中配置barButton项(您可以通过访问UIViewController的navigationController属性来访问任何视图控制器中的navigationController)。 [self.navigationController setBarButtonItem:myBarButtonItem];
  • 在PersonVC Class
  • 中实现dismissPersonVC方法

答案 1 :(得分:0)

如果您的主视图控制器是UIViewController,那么您应该阅读:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html#//apple_ref/doc/uid/TP40007457-CH18-SW6

特别是那部分:

- (void) displayContentController: (UIViewController*) content
{
   [self addChildViewController:content];                 // 1
   content.view.frame = [self frameForContentController]; // 2
   [self.view addSubview:self.currentClientView];
   [content didMoveToParentViewController:self];          // 3
 }

- (void) hideContentController: (UIViewController*) content
{
   [content willMoveToParentViewController:nil];  // 1
   [content.view removeFromSuperview];            // 2
   [content removeFromParentViewController];      // 3
}