我想要实现的是设计我的共享"界面构建器中的UI的一部分,并使用子视图控制器向用户显示内容。这可能听起来像是试图重新发明UINavigationController
,但事实并非如此。事实上,整个事情都嵌入其中。
现在,我尝试做的是更改此BaseViewController
的子视图控制器,并在导航栏中指明此更改,以便保留其所有功能。
我尝试添加这样的方法:
+ (UIViewController *)baseViewControllerWithChild:(UIViewController *)child {
BaseViewController *base = [BaseViewController new];
[base addChildViewController:child];
child.view.frame = base.childViewControllerContainer.frame;
[base.view addSubview:child.view];
[child didMoveToParentViewController:base];
return base;
}
然后像这样使用它:
- (void)didTouch:(UIButton *)sender {
[self.parentViewController.navigationController pushViewController:[BaseViewController baseViewControllerWithChild:[DummyViewController new]] animated:YES];
}
(注意:DummyViewController
就是这样 - 一个虚拟的vc,仅用于测试,它只在viewDidLoad
中设置了背景颜色
此方法是第一个子视图控制器中按钮的处理程序。到现在为止还挺好。不幸的是,结果并不像预期的那样 - 推送的视图控制器是黑色的。在第一,我认为这是因为BaseViewController
是在storyboard
中设计的,最初设置为导航控制器的rootViewController
。将其移至xib
文件并通过代码设置并不适合我,因为您无法在Container View
中添加xib
。
总而言之,我希望基本设计由BaseViewController
类管理,内容将添加为childViewController
。推送新的视图控制器将是对这些childViewController
的操作的结果,并应相应地更新导航堆栈。
此外,整个事情需要与iOS 7一起使用。
非常感谢任何有关如何实现这一目标的帮助!
答案 0 :(得分:0)
问题是由base.childViewControllerContainer
nil
引起的 - 这是因为视图控制器的view
属性被懒惰加载。在访问[base view]
之前添加base.childViewControllerContainer
解决了这个问题,但我不确定这是否是唯一且最好的方法。