更改子视图控制器(Change child view controller)

2019-07-17 20:49发布

我有,当我按下一个按钮,一个子视图控制器出现一个视图控制器。 这完美的作品,但我想,如果我按下按钮旁边即是这里面做这样两步登录时更改为另外一个这个孩子视图控制器。 任何的想法? 因为从主视图控制器我知道如何表现一个孩子,但来自孩子,我不知道该怎么做。

Answer 1:

如果使用故事板,你可以创建你自己的孩子代替SEGUE,如:

ReplaceSegue.h

@interface ReplaceSegue : UIStoryboardSegue

@end

ReplaceSegue.m

@implementation ReplaceSegue

- (void)perform
{
    UIViewController *source = self.sourceViewController;
    UIViewController *destination = self.destinationViewController;
    UIViewController *container = source.parentViewController;

    [container addChildViewController:destination];
    destination.view.frame = source.view.frame;
    [source willMoveToParentViewController:nil];

    [container transitionFromViewController:source
                           toViewController:destination
                                   duration:0.5
                                    options:UIViewAnimationOptionTransitionCrossDissolve
                                 animations:^{
                                 }
                                 completion:^(BOOL finished) {
                                     [source removeFromParentViewController];
                                     [destination didMoveToParentViewController:container];
                                 }];
}

@end

然后,您可以打开你的故事板,放一个容器视图的容器视图控制器子控制器上而上,把一个自定义赛格瑞从第一个孩子现场的第二个孩子的场景。 你要指定ReplaceSegue类两个子场景之间的自定义SEGUE:

请注意,如果你正确使用自动布局或自动调整大小的第二个孩子来看,一切都将正常工作(特别是与目标控制器的视图的框架的手动设置ReplaceSegue )。 但在Interface Builder,这第二个孩子的场景的布局看起来不正确,可以使场面有点尴尬的适当的设计,因为(Xcode中4.5的,至少)“模拟指标”为第二个孩子现场没有做好推断适当的大小。 所以,你应该可能是第二个孩子场景的模拟指标的大小与‘推断’到‘自由曲面’改变,然后手动调整老二场景的大小:

这是不是很优雅的Xcode的经验,但它的作品。 如果你正在使用正确的自动版式或自动调整大小口罩,微小差异是非常正常处理。



文章来源: Change child view controller