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
Odpowiedz
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;
}
Dziękuję. To działa. –
Wspaniale, przegrałbym 10 razy, gdybym mógł. –
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] | ^ ' –
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];
nie jest możliwe, gdyż musi radzić sobie z relacją rodzica i dziecka, która nie jest przeznaczona dla Xib –