使用objective-c以编程方式设置子视图的视图控制器

时间:2014-07-18 20:48:36

标签: ios objective-c storyboard

我有一个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;

我该怎么做?还有更多,这是一个好主意吗?

3 个答案:

答案 0 :(得分:2)

在Storyboard中,您可以将这些子视图放在Container View控件中,该控件定义可以包含子视图控制器的视图控制器的区域。然后你让那个子视图控制器管理子视图。

答案 1 :(得分:1)

肯定没有调用{p> viewDidLoad,因为已经加载了视图。如果没有调用其他方法(viewWillAppear等),也可以将调用转发给其他viewControllers。

我会采用另一种方式,即将已经具有viewController的视图添加到MainViewController。我对此并不完全确定,但我认为viewControllers方法将以这种方式调用。

它应该如下工作:

为包含导航视图的MainNavigationViewController创建一个故事板。为包含内容视图的MainContentViewController创建另一个。 从MainViewController的故事板中删除所有子视图,但将navigationView和contentView保留为空占位符。 在mainViewController中为viewControllers创建两个属性来存储它们的引用。 在MainViewController的viewDidLoad中,通过

创建另外两个viewControllers
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有一堆视图控制器。您必须将视图控制器推入导航视图堆栈。