UINavigationController和UIViewController的导航控制器属性

Eri*_*rik 5 objective-c uiviewcontroller uinavigationcontroller ios

我最近遇到过这种情况,我想知道为什么这样设计.

如果你UINavigationController的孩子的容器视图中有一个嵌入了视图控制器的容器视图,为什么这个孩子的self.navigationController属性不能设置为什么?

来自Apple Doc的主题:

视图控制器层次结构中最近的祖先是导航控制器.(只读)

@property(非原子,只读,保留)UINavigationController*navigationController讨论如果接收器或其祖先之一是导航控制器的子节点,则此属性包含拥有的导航控制器.如果视图控制器未嵌入导航控制器中,则此属性为nil.

对我来说,我会想,因为它的父元素嵌入到导航控制器中,它会将它的引用传递给链接到它的子节点.我错过了什么吗?是不是有充分的理由呢?

Sep*_*nic 1

嗨,我和你有同样的问题。我通过使用以下代码来显示视图控制器来修复它:

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

        AboutTheAppViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"aboutMenuSegueID"];
        [self addChildViewController:loginVC];
        [loginVC didMoveToParentViewController:self];

        [self.view addSubview:loginVC.view];
Run Code Online (Sandbox Code Playgroud)

然后我将其添加到 AboutTheAppViewController (我将要显示的控制器):

 -(void)willMoveToParentViewController:(UIViewController *)parent

{
     NSLog(@"FirstViewController moving to or from parent view controller");
 //    self.view.backgroundColor=[UIColor blueColor];
}

-(void)didMoveToParentViewController:(UIViewController *)parent
{
   NSLog(@"FirstViewController did move to parent view controller");
//    self.view.frame = CGRectMake(20, 20, 280, 528);
}
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。