2015-09-13 21 views
14

Mam plik .xib i chcę dodać go widoku kontenera (do umieszczenia wewnątrz ViewController). Niestety widok kontenera jest dostępny tylko w scenorysie. Ale kiedy tworzę plik .xib i szukam kontrolera widoku kontenera, nie znajduję go. Czy ktoś może mi doradzić, jak osiągnąć moje zadanie?Dodaj ContainerView wewnątrz UIViewController utworzone z .xib

+0

nie jest możliwe, gdyż musi radzić sobie z relacją rodzica i dziecka, która nie jest przeznaczona dla Xib –

Odpowiedz

19

Jeśli używasz xib zamiast storyboard, można po prostu dodać zwykły UIView do xib działać jako kontener. Następnie w kodzie dodaj swoje childViewController's view jako wyeksportowany kontener. Tutaj mam następnie odpowiedni widok dziecko metod kontrolera i dodaje ograniczenia układu w celu zapewnienia jego aktualizacji ramy z ramą kontenera:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIViewController *childViewController = ...; // create your child view controller 

    [self addChildViewController:childViewController]; 
    [self.containerView addSubview:childViewController.view]; 
    [childViewController didMoveToParentViewController:self]; 

    NSArray *horzConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[childView]|" 
                    options:0 
                    metrics:nil 
                    views:@{@"childView" : childViewController.view}]; 

    NSArray *vertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[childView]|" 
                    options:0 
                    metrics:nil 
                    views:@{@"childView" : childViewController.view}]; 

    [self.view addConstraints:horzConstraints]; 
    [self.view addConstraints:vertConstraints]; 

    childViewController.view.translatesAutoresizingMaskIntoConstraints = NO; 
} 
+0

Dziękuję. To działa. –

+0

Wspaniale, przegrałbym 10 razy, gdybym mógł. –

+1

Wystąpił błąd *** Kończenie aplikacji z powodu nieprzechwyconego wyjątku "NSInvalidArgumentException", powód: "Nie można przeanalizować formatu ograniczenia: Nie można interpretować" | " znak, ponieważ powiązany widok nie ma podglądu H: | [childView] | ^ ' –

1

Zaznacz to:

SelectDateViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"selectDateVCID"]; 
[self addChildViewController:vc]; 
[vc.view setFrame:CGRectMake(0.0f, 0.0f, self.selectDateContainerView.frame.size.width, self.selectDateContainerView.frame.size.height)]; 
[self.selectDateContainerView addSubview:vc.view]; 
[vc didMoveToParentViewController:self];