在导航控制器中添加一次公共视图
Add common views once in navigation controller
我想要实现的是在界面生成器中设计 UI 的 "shared" 部分,并使用子视图控制器向用户显示内容。这听起来像是在尝试重新发明 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
文件并从代码设置对我来说不太管用,因为你不能在 xib
.
中添加 Container View
总而言之,我希望有一个由 BaseViewController
class 管理的基础设计,内容将作为其 childViewController
添加。推送一个新的视图控制器将是对这些 childViewController
的操作的结果,并且应该相应地更新导航堆栈。
此外,整个事情需要与 iOS 7.
一起工作
非常感谢任何关于如何尝试实现这一目标的帮助!
问题是由 base.childViewControllerContainer
引起的 nil
- 这是由于 view
属性 的视图控制器被延迟加载的事实引起的。在访问 base.childViewControllerContainer
之前添加 [base view]
解决了这个问题,但我不确定这是否是唯一的、最好的方法。
我想要实现的是在界面生成器中设计 UI 的 "shared" 部分,并使用子视图控制器向用户显示内容。这听起来像是在尝试重新发明 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
文件并从代码设置对我来说不太管用,因为你不能在 xib
.
Container View
总而言之,我希望有一个由 BaseViewController
class 管理的基础设计,内容将作为其 childViewController
添加。推送一个新的视图控制器将是对这些 childViewController
的操作的结果,并且应该相应地更新导航堆栈。
此外,整个事情需要与 iOS 7.
一起工作非常感谢任何关于如何尝试实现这一目标的帮助!
问题是由 base.childViewControllerContainer
引起的 nil
- 这是由于 view
属性 的视图控制器被延迟加载的事实引起的。在访问 base.childViewControllerContainer
之前添加 [base view]
解决了这个问题,但我不确定这是否是唯一的、最好的方法。