子视图控制器中的导航堆栈

Posted

技术标签:

【中文标题】子视图控制器中的导航堆栈【英文标题】:navigation stack within child view controller 【发布时间】:2014-09-14 12:59:43 【问题描述】:

我将UINavigationController 放在这样的容器视图中(这在全屏UIViewController 子类中):

  UIViewController *litteViewController = [[UIViewController alloc]initWithNibName:nil bundle:nil];
  UINavigationController *littleNavigator = [[UINavigationController alloc]initWithRootViewController:litteViewController];

  UIView *containerView = [[UIView alloc]initWithFrame:CGRectMake(100.0, 100.0, 250.0, 320.0)];
  littleNavigator.view.frame = containerView.bounds;

  [self addChildViewController:littleNavigator];

  [containerView addSubview:littleNavigator.view];
  [self.view addSubview:containerView];

  [littleNavigator didMoveToParentViewController:self];

现在这按预期工作,littleViewController 出现在我期望的矩形中,顶部有一个导航栏。现在让我们说由于littleViewController 内部的一些交互,发生了这样的事情

 -(void)someButtonAction:(id)sender

       UIViewController *secondLittleViewController = [[UIViewController alloc]initWithNibName:nil bundle:nil];
       [self.navigationController presentModalViewController:secondLittleViewController animated:YES];

不幸的是,这个后续的控制器最终会全屏显示。现在我已经在 popoverControllerssplitViewControllers 内部完成了这个操作,它们的行为完全符合我的要求,导航堆栈构建在它开始的小矩形内。

如何在容器内的任意 CGRect 中构建导航堆栈?

【问题讨论】:

iPhone 还是 iPad? ios 版本? 谢谢伙计。我正在寻找的代码应该适用于任何 iOs 设备 >= iOs5(这是 addChildViewConroller: stuff 所在的位置) 在 iPhone 和 iPod touch 上,呈现的视图始终是全屏的。所以你需要更改为 pushViewController 哦,是的!哇谢谢不敢相信我忘记了那个。非常感谢,你会回答吗? 【参考方案1】:

在 iPhone 和 iPod touch 上,呈现的视图始终是全屏的。所以你需要更改为 pushViewController

很高兴我能帮上忙

【讨论】:

是的!谢了哥们。 pushViewController: animated: 一直存在,我不认为我真的需要它。非常感谢

以上是关于子视图控制器中的导航堆栈的主要内容,如果未能解决你的问题,请参考以下文章

内存警告后的导航控制器堆栈问题

如何识别导航堆栈中的前一个视图控制器

从导航堆栈中删除视图控制器

将值传递给导航视图控制器堆栈中的前一个视图控制器

TabBar 覆盖导航堆栈中的视图控制器内容

弹出到导航堆栈中的特定视图控制器