0

1つのビュー内に複数のUIViewControllerオブジェクトを表示しようとしています。とりあえず、アプリの読み込み時に単一のUIViewControllerオブジェクトを表示したいと思います。ただし、アプリ画面は空白で表示されますが、子ViewController内にラベルが表示されているはずです。

これが私がしたことです:

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

次に、InterfaceBuilderのストーリーボードで

  • 3つのViewControllerを追加します
  • それらのそれぞれにクラスを割り当てましたParentViewController、Child1Controller、Child2Controller
  • Child2Controllerオブジェクトで、View内にUILabelを追加しました。
  • Child2Controller.hで、UILabelのIBOutletを定義し、Child2Controller.mで同じものの合成ステートメントを追加しました。
  • 最後にproject-Info.plistでメインストーリーボードファイルを設定します

ここで何かが恋しかったですか?

4

1 に答える 1

3

iOS 5以降、ViewControllerContainmentを利用できるようになりました。UINavigationControllerこれは、またはのようなカスタムコントローラーコンテナを作成できる新しい方法ですUITabBarController

あなたの場合、これは非常に便利です。実際、ストーリーボードでは、親コントローラーと2つの子コントローラーを作成できます。2つの子がリンクされていないときに、親が別のシーンにリンクされている可能性があります。これらは、親コントローラー内で使用できる独立したシーンです。

たとえば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];
}

そして、voilà!子コントローラーによって管理される1つのビューを含むコントローラーがあります。

詳細については、how-does-view-controller-containment-work-in-ios-5を参照してください。

それが役に立てば幸い。

于 2012-04-25T13:43:10.123 に答える