Подтвердить что ты не робот

Встраивать UIViewController программно?

У меня есть установка раскадровки с UIViewController с представлением контейнера, чтобы я мог встроить в нее еще один UIViewController.

В определенном сценарии мне нужно изменить встроенный контроллер представления. В моем раскадровке у меня не может быть двух segues из моего контейнера (только один встроенный segue). Это заставляет меня делать это программно.

У меня есть мой контейнерный вид в моей раскадровке без подключенного встраивания.

Теперь, с этой точки зрения, как я могу программно внедрить выделенный объект UIViewController?

4b9b3361

Ответ 1

Вы можете сделать это программным способом, ниже приведен метод, который будет принимать значение bool, чтобы принять решение о необходимости добавления контроллера представления в представление контейнера, а затем создаст экземпляр объекта и после этого добавит его в containerView

- (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;
}

Когда вам нужно удалить контроллер просмотра из контроллера просмотра контейнера, вы можете сделать это

   [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 о контроллерах контейнеров