2015-08-23 9 views
14

Ich habe ein Storyboard-Setup mit einer UIViewController mit einer Containeransicht, so dass ich ein anderes UIViewController darin einbetten kann.UIViewController programmatisch einbetten?

In einem bestimmten Szenario muss ich den eingebetteten View-Controller ändern. In meinem Storyboard kann ich nicht zwei Übergänge von meiner Containeransicht haben (nur ein einziger Embed-Segue). Was mich dazu bringt, es programmatisch zu machen.

Ich habe meine Containeransicht in meinem Storyboard mit keinem verbundenen Embed-Segue.

Wie kann ich nun mein ausgewähltes Objekt UIViewController programmatisch einbetten?

Antwort

23

Sie können dies tun, indem sie programmatisch, unten ist die Methode, die einen Bool Wert nehmen Entscheidung zu treffen, die Controller in der Containeransicht müssen Ansicht hinzugefügt werden und wird dann ein Objekt instanziiert und danach wird es zu containerView hinzufügen

- (void)addViewControllerToContainerView:(BOOL)addVC1 
{ 
// Get storyboard 
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"<name of storyboard>" bundle:[NSBundle mainBundle]]; 
    UIViewController *viewController = nil; 
    if (addVC1) 
    { 
// get viewController with identifier 
     viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 1 Identifier>"]; 
    } 
    else 
    { 
     viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 2 Identifier>"]; 
    } 
// lets add it to container view 
    [viewController willMoveToParentViewController:self]; 
    [self.view addSubview:viewController.view]; 
    [self addChildViewController:viewController]; 
    [viewController didMoveToParentViewController:self]; 
// keep reference of viewController which may be useful when you need to remove it from container view, lets consider you have a property name as containerViewController 
    self.containerViewController = viewController; 
} 

Wenn Sie view-Controller aus dem Container-view-Controller entfernen möchten, können Sie tun, um diese

[self.containerViewController willMoveToParentViewController:nil]; // 1 
    self.containerViewController.view removeFromSuperView]; 
    [self.containerViewController removeFromParentViewController];//this line is updated as view is removed from parent view cotnroller istead of its viewcontroller is removed from parentViewController 
    self.containerViewController = nil 

Apple docs über Container view-Controller

+0

Danke für die umfassende Antwort. Leider funktioniert es nicht so, wie ich es mir vorgestellt habe. Zuerst muss ich einen 'UIViewController' in einer' UIView' des root 'UIViewController' aktivieren. Dies füllt die gesamte Ansicht. Zweitens, wenn ich es als Teilansicht der 'UIView' (anstelle der gesamten VC-Ansicht) hinzufüge, entspricht es nicht den automatischen Layout-Einschränkungen, wie sie vom Storyboard eingebettet wären. –

+0

Dieses Ding ist erreichbar dieser Ansatz, und deshalb gibt es Konzept von Kind und Eltern View-Controller, wenn Sie einen View-Controller als Kind View-Controller hinzufügen werden Sie alle anderen Lifecycle-Methoden in Kind VC aufgerufen werden, und sicherlich AutoLayoutWill funktioniert auch . –

+0

Ich habe einen Link zu Apple Docs hinzugefügt, der beschreibt, wie man Container View Controller implementiert –

Verwandte Themen