我试着在单个视图中显示多个UIViewController对象。目前我想在应用加载时显示一个UIViewController对象。但是应用程序屏幕显示为空白,而应该在子视图控制器中显示标签。
这是我做的:
ParentViewController.h
#import <UIKit/UIKit.h>
@interface ParentViewController : UIViewController
{
UIViewController *child1Controller;
UIViewController *child2Controller;
}
@end
ParentViewController.m
#import "ParentViewController.h"
#import "Child1Controller.h"
#import "Child2Controller.h"
@interface ParentViewController ()
@end
@implementation ParentViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { ... }
- (void)viewDidLoad
{
child2Controller = [[Child2Controller alloc] init];
[self.view addSubview:child2Controller.view];
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)viewDidUnload { ... }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { ... }
@end
然后在界面构建器的故事板中
我错过了什么吗?
答案 0 :(得分:3)
从iOS 5开始,可以利用View Controller Containment。这是一种新方法,允许您创建自定义控制器容器,如UINavigationController
或UITabBarController
。
在您的情况下,这可能非常有用。实际上,在故事板中,您可以创建父控制器和两个子控制器。父母可以链接到另一个场景,而两个孩子没有链接。它们是您可以在父控制器中使用的独立场景。
例如,在父控制器的viewDidLoad
方法中,您可以执行以下操作:
- (void)viewDidLoad
{
[super viewDidLoad];
UIStoryboard *storyboard = [self storyboard];
FirstChildController *firstChildScene = [storyboard instantiateViewControllerWithIdentifier:@"FirstChildScene"];
[self addChildViewController:firstChildScene];
[firstChildScene didMoveToParentViewController:self];
}
然后在FirstChildController
覆盖didMoveToParentViewController
- (void)didMoveToParentViewController:(UIViewController *)parent
{
// Add the view to the parent view and position it if you want
[[parent view] addSubview:[self view]];
CGRect newFrame = CGRectMake(0, 0, 350, 400);
[[self view] setFrame:newFrame];
}
瞧!您有一个控制器,其中包含一个由子控制器管理的视图。
有关详细信息,请参阅how-does-view-controller-containment-work-in-ios-5。
希望它有所帮助。