更改子视图控制器

我有一个视图控制器,当我按下button时出现一个子视图控制器。 这工作完美,但我想改变这个孩子视图控制器为另一个,如果我按下button,这是在这里做的像两步login。 任何想法? 因为从主视图控制器我知道如何展示一个孩子,但从孩子,我不知道该怎么做。

如果使用故事板,你可以创build自己的孩子replacesegue,例如:

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 

然后可以打开故事板,在容器视图控制器和子控制器上放置一个容器视图,将第一个子场景中的自定义渐变放到第二个子场景中。 您需要为两个子场景之间的自定义segue指定ReplaceSegue类:

容器控制器故事板

请注意,如果您在第二个子视图上正确使用了自动布局或自动resize,则一切正常(特别是在ReplaceSegue手动设置目标控制器视图的框架时)。 但是在Interface Builder中,第二个子场景的布局看起来不太合适,可以使场景的devise有些尴尬,因为(至less在Xcode 4.5中)第二个孩子的“模拟度量标准”现场并没有做好推断适当的大小。 所以你可能应该把第二个子场景的模拟指标的大小从“推断”改为“自由forms”,然后手动调整第二个子场景的大小:

容器故事板与手动调整的第二个孩子场景大小

这不是非常优雅的Xcode的经验,但它的工作原理。 如果你正在使用自动布局或自动resize的掩码,小的变化处理非常优雅。