Ios UINavigationController和UIViewController';s导航控制器属性
我最近偶然发现了这一点,我想知道为什么会这样设计 如果您有一个Ios UINavigationController和UIViewController';s导航控制器属性,ios,objective-c,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,我最近偶然发现了这一点,我想知道为什么会这样设计 如果您有一个UINavigationController的子对象的容器视图中有一个嵌入式视图控制器,为什么该子对象的self.navigationController属性没有设置为某个值 苹果文档中关于该主题的内容: 视图控制器层次结构中最近的祖先,即导航控制器。(只读) @属性(非原子、只读、保留)UINavigationController*navigationController 讨论 如果接收器或其祖先之一是导航控制器的子级,则此属性包含
UINavigationController
的子对象的容器视图中有一个嵌入式视图控制器,为什么该子对象的self.navigationController
属性没有设置为某个值
苹果文档中关于该主题的内容:
视图控制器层次结构中最近的祖先,即导航控制器。(只读)
@属性(非原子、只读、保留)UINavigationController*navigationController
讨论
如果接收器或其祖先之一是导航控制器的子级,则此属性包含所属导航控制器。如果视图控制器未嵌入导航控制器中,则此属性为nil
对我来说,我会想,因为它的父节点嵌入到导航控制器中,它会将它的引用沿着链传递给它的子节点。我错过什么了吗?有没有充分的理由证明情况并非如此?嗨,我和你有同样的问题。我通过使用以下代码显示视图控制器修复了此问题:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
AboutTheAppViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"aboutMenuSegueID"];
[self addChildViewController:loginVC];
[loginVC didMoveToParentViewController:self];
[self.view addSubview:loginVC.view];
然后我将其添加到AboutTheAppViewController(将要显示的我的控制器):
我希望这会有所帮助。您如何添加子视图控制器?可能出了什么问题。在IB:NavController rootview->ViewControllerA的容器视图embed segue->ViewControllerb中,考虑到它在IB中不起作用,这很有意思。我正在寻找一个IB解决方案,并且想知道这是否是一种故意的状态,而不仅仅是一种疏忽。如果没有其他人对这个问题有任何意见,我会接受这个答案。@Erik我很高兴这有帮助。我不确定这是否可能,但我会看看能找到什么。好的,尽管我很希望答案被接受,但我希望你能找到一个更好的答案:)
-(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);
}