2012-04-25 3 views
0

하나의 뷰 안에 여러 UIViewController 객체를 표시하려고합니다. 당분간 나는 앱이로드 될 때 하나의 UIViewController 객체를 표시하려고합니다. 그러나 자식보기 컨트롤러 내부에 레이블을 표시해야하는 반면 응용 프로그램 화면은 비어있는 것처럼 보입니다. 여기 iOS : UIViewController가 스토리 보드를 사용하는 다른 UIViewController를 표시하지 않습니다.

내가 무슨 짓을 :

ParentViewController.h

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

에게

#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 

ParentViewController.m

그리고 인터페이스 빌더에서 스토리 보드에

  • 3보기를 추가 컨트롤러
  • Child2Controller 개체에있는 ParentViewController, Child1Controller & Child2Controller
  • 에 클래스를 할당하고 View 내부에 UILabel을 추가했습니다. Child2Controller.h에서
  • 는 UILabel의를 위해 함께 IBOutlet을 정의하고 프로젝트의 Info.plist는

가 뭔가 이상 그리워 했 메인 스토리 보드 파일을 설정 마침내 Child2Controller.m에서 동일한에 대한

  • 을 합성되고 문을 추가 이리?

  • 답변

    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을 참조하십시오.

    희망이 있습니다.

    +0

    +1 사실 참 잘 작동합니다. 그러나 내가 알아 내고 싶은 것은 코드/흐름에서 제가 잘못 게시 한 것입니다. – vikmalhotra

    +0

    @ShiVik Child2Controller는 어떻습니까? xib로로드 되었습니까? 아니면 * loadView * 메서드를 재정의 했습니까? –

    +0

    아니요 새로운 xib 파일이나 'loadView'를 만들지 않았습니다. 내가 한 일은 스토리 보드에 UIViewController를 추가하고 아이디 속성 검사기에서 사용자 정의 클래스를 Child2Controller로 지정했습니다. – vikmalhotra

    관련 문제