在ContainerView中切换UIViewControllers

时间:2014-11-20 13:35:42

标签: objective-c uicontainerview

我有一个MainViewController,里面有一个ContainerView,它显示了ViewControllerA。

在ContainerView中是否有从UIViewControllerA到UIViewControllerB的方法?

层次结构是:

MainViewController -> containerView
ViewControllerA    -> btnShowViewControllerB
ViewControllerB

代码是:

// MainViewController.m

- (void)viewDidLoad {
[super viewDidLoad];

    // Show ViewControllerA in the ContainerView programmatically
    ViewControllerA *vcA = [self.storyboard instantiateViewControllerWithIdentifier:@"A"];
    [self addChildViewController:vcA];
    [self.containerView addSubview:vcA.view];
    [vcA didMoveToParentViewController:self];
}

// ViewControllerA.m

- (IBAction)btnShowViewControllerB:(UIButton *)sender {
}

谢谢

2 个答案:

答案 0 :(得分:0)

这是以编程方式切换viewControllers的方法:

[self addChildViewController:nextViewController];
nextViewController.view.frame = view.bounds;
[view addSubview:nextViewController.view];
[nextViewController didMoveToParentViewController:self];

答案 1 :(得分:0)

您需要在容器视图控制器中进行转换调用。如果按钮操作在ViewControllerA中,那么你需要一种方法来告诉容器视图控制器,"嘿 - 现在是时候交换视图控制器"。通常,这是由代表完成的。 This question详细介绍了如何设置和使用委托。一旦你的容器知道进行交换,你可以使用容器视图控制器中的这样的调用来设置它的动画:

[self addChildViewController:viewControllerB];
[self transitionFromViewController:viewControllerA
                  toViewController:viewControllerB
                          duration:0.3
                           options:UIViewAnimationOptionCurveEaseIn
                        animations:^{
                            viewControllerB.view.alpha = 1;
                            viewControllerA.view.alpha = 0;
                        } completion:^(BOOL finished) {
                            [viewControllerA removeFromParentViewController];
                        }];