繁体   English   中英

iOS:UIViewController不会使用故事板显示另一个UIViewController

[英]iOS: UIViewController doesn't display another UIViewController using storyboards

我正在尝试在单个视图中显示多个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

然后在界面构建器的情节提要中

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

我在这里错过了什么吗?

从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];
}

和瞧! 您有一个控制器,其中包含一个由子控制器管理的视图。

有关更多信息,请参见ios-5中的view-viewes-controller-containment-work-in-ios-5

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM