0

我正在尝试在单个视图中显示多个 UIViewController 对象。目前我想在应用加载时显示一个 UIViewController 对象。但是应用程序屏幕显示为空白,而它应该在子视图控制器内显示一个标签。

这是我所做的:

父视图控制器.h

#import <UIKit/UIKit.h>
@interface ParentViewController : UIViewController
{
    UIViewController *child1Controller;
    UIViewController *child2Controller;
}
@end

父视图控制器.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

然后在界面生成器的情节提要中

  • 添加 3 个视图控制器
  • 为它们中的每一个分配了一个类 ParentViewController、Child1Controller 和 Child2Controller
  • 在 Child2Controller 对象中,在 View 中添加了一个 UILabel。
  • 在 Child2Controller.h 中为 UILabel 定义了 IBOutlet 并在 Child2Controller.m 中添加了相同的综合语句
  • 最后在 project-Info.plist 中设置主故事板文件

我在这里错过了什么吗?

4

1 回答 1

3

从 iOS 5 开始,可以利用 View Controller Containment。这是一种新方法,允许您创建自定义控制器容器,例如UINavigationControllerUITabBarController

在您的情况下,这可能非常有用。事实上,在您的故事板中,您可以创建父控制器和两个子控制器。父母可以链接到另一个场景,而两个孩子没有链接。它们是您可以在父控制器中使用的独立场景。

例如,在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

希望能帮助到你。

于 2012-04-25T13:43:10.123 回答