Ann*_*nna 9 controller view parent-child ios
我有一个视图控制器,当我按下按钮时,会出现一个子视图控制器.这很好用,但是如果我按下旁边的按钮做两步登录,我想把这个子视图控制器换成另一个.任何的想法?因为从主视图控制器我知道如何显示一个孩子,但从孩子,我不知道如何做到这一点.
Rob*_*Rob 44
如果使用故事板,您可以创建自己的子代替segue,例如:
ReplaceSegue.h
@interface ReplaceSegue : UIStoryboardSegue
@end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
然后,您可以打开故事板,在容器视图控制器和子控制器上放置容器视图,将第一个子场景中的自定义segue放到第二个子场景中.您将要为ReplaceSegue两个子场景之间的自定义segue 指定类:

请注意,如果您在第二个子视图上正确使用了autolayout或autosizing,一切都会正常工作(特别是手动设置目标控制器视图的框架ReplaceSegue).但是在Interface Builder中,第二个子场景的布局看起来不太正确,并且可以使场景的正确设计有点尴尬,因为(至少Xcode 4.5)第二个孩子的"模拟指标"场景不能很好地推断出合适的尺寸.因此,您应该将第二个子场景的模拟指标大小从"推断"更改为"自由形式",然后手动调整第二个子场景的大小:

它不是非常优雅的Xcode体验,但它的工作原理.如果您正确使用自动布局或自动调整遮罩,则可以非常优雅地处理微小变化.
| 归档时间: |
|
| 查看次数: |
8745 次 |
| 最近记录: |