我有一个视图控制器,当我按下按钮时,会出现一个子视图控制器。这工作得很好,但如果我按下其中的下一个按钮来执行两步登录,我想将此子视图控制器更改为另一个子视图控制器。
任何想法?因为从主视图控制器我知道如何显示孩子,但从孩子我不知道该怎么做。
如果使用故事板,您可以创建自己的子替换segue,例如:
替换Segue.h
@interface ReplaceSegue : UIStoryboardSegue
@end
替换Segue.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
两个子场景之间的自定义 Segue 的类:
请注意,如果您在第二个子视图上正确使用了自动布局或自动调整大小,则一切都会正常工作(特别是在手动设置目标控制器视图的框架时)ReplaceSegue
)。但在 Interface Builder 中,第二个子场景的布局看起来不太正确,并且可能使场景的正确设计有点尴尬,因为(至少从 Xcode 4.5 开始)第二个子场景的“模拟指标”场景不能很好地推断适当的大小。因此,您可能应该将第二个子场景的模拟指标大小从“推断”更改为“自由形式”,然后手动调整第二个子场景的大小:
这不是非常优雅的 Xcode 体验,但它确实有效。如果您正确使用自动布局或自动调整蒙版大小,则可以非常优雅地处理细微变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)