UINavigationController 和 UIViewController 的导航控制器属性
Posted
技术标签:
【中文标题】UINavigationController 和 UIViewController 的导航控制器属性【英文标题】:UINavigationController and the UIViewController's navigation controller property 【发布时间】:2014-08-22 16:42:12 【问题描述】:我最近遇到了这个问题,我想知道为什么要这样设计。
如果您有一个UINavigationController
,他的孩子有一个容器视图,其中有一个嵌入式视图控制器,为什么这个孩子的self.navigationController
属性没有被设置?
来自 Apple Doc 的主题:
视图控制器层次结构中最近的祖先是导航控制器。 (只读)
@property(nonatomic, readonly, retain) UINavigationController *navigationController 讨论 如果接收器或其祖先之一是导航控制器的子级,则此属性包含拥有的导航控制器。如果视图控制器未嵌入导航控制器,则此属性为零。
对我来说,我认为因为它的父级嵌入到导航控制器中,所以它会将它的引用沿链传递给它的子级。我错过了什么吗?是否有充分的理由不是这种情况?
【问题讨论】:
如何添加子视图控制器?也许那里出了点问题。 在IB中:NavController-rootview->ViewControllerA的容器view-embed segue->ViewControllerB 【参考方案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];
然后我将它添加到 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);
希望对你有帮助。
【讨论】:
这很有趣,因为它在 IB 中不起作用。我一直在寻找一个 IB 解决方案,而且想知道这是否是一种故意的事态,而不仅仅是一个疏忽。如果没有其他人对此问题有任何意见,我会接受这个答案。 @Erik 我很高兴它有所帮助。我不确定这是否可能,但我会看看,看看我能找到什么。好的,尽管我希望答案被接受,但希望您能找到更好的答案:)以上是关于UINavigationController 和 UIViewController 的导航控制器属性的主要内容,如果未能解决你的问题,请参考以下文章
(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换
UINavigationController 和 titleView
UINavigationController 子类和推送 Segue