我有一个UIViewController(MainViewController
),它管理一个包含两个子视图的视图,这是我使用storyboard创建的。现在我希望这两个子视图由他们自己的模型控制器管理,因此应用程序完成的大部分工作都是分布式的,而不是这个控制器的核心。
我尝试在视图控制器上设置视图,但它不起作用(其他控制器上的至少viewDidLoad
不会被调用,尽管视图显示)。在MainViewController
' s viewDidLoad
我有这个:
MainNavigationViewController* navigationViewController = [[MainNavigationViewController alloc] init];
MainContentViewController* contentViewController = [[MainContentViewController alloc] init];
navigationViewController.view = self.navigationView;
contentViewController.view = self.contentView;
我该怎么做?还有更多,这是一个好主意吗?
答案 0 :(得分:2)
在Storyboard中,您可以将这些子视图放在Container View控件中,该控件定义可以包含子视图控制器的视图控制器的区域。然后你让那个子视图控制器管理子视图。
答案 1 :(得分:1)
viewDidLoad
,因为已经加载了视图。如果没有调用其他方法(viewWillAppear等),也可以将调用转发给其他viewControllers。
我会采用另一种方式,即将已经具有viewController的视图添加到MainViewController。我对此并不完全确定,但我认为viewControllers方法将以这种方式调用。
它应该如下工作:
为包含导航视图的MainNavigationViewController创建一个故事板。为包含内容视图的MainContentViewController创建另一个。
从MainViewController的故事板中删除所有子视图,但将navigationView和contentView保留为空占位符。
在mainViewController中为viewControllers创建两个属性来存储它们的引用。
在MainViewController的viewDidLoad
中,通过
self.mainNavigationController = [[UIStoryboard storyboardWithName:@"MainNavigationControllersStoryboardName" bundle:nil] instantiateViewControllerWithIdentifier:@"MainNavigationControllerIdentifier"];
self.mainContentController = [[UIStoryboard storyboardWithName:@"MainContentViewControllersStoryboardName" bundle:nil] instantiateViewControllerWithIdentifier:@"MainContentViewControllerIdentifier"];
并将他们的观点添加到占位符:
[self.navigationView addSubview: mainNavigationController.view];
[self.contentView addSubview: mainContentController.view];
我希望您使用自动布局,以便视图调整其大小,否则您必须在viewWillLayoutSubviews
中设置其帧以匹配父视图的帧。
答案 2 :(得分:0)
我认为你正在寻找像
这样的东西[navigationViewController pushViewController:contentViewController animated:YES];
NavigationViewController有一堆视图控制器。您必须将视图控制器推入导航视图堆栈。