iOS5中,UIViewController新添加了几个方法:

- (void)addChildViewController:(UIViewController *)childController NS_AVAILABLE_IOS(5_0);
- (void) removeFromParentViewController NS_AVAILABLE_IOS(5_0); - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(5_0); - (void)willMoveToParentViewController:(UIViewController *)parent NS_AVAILABLE_IOS(5_0);
- (void)didMoveToParentViewController:(UIViewController *)parent NS_AVAILABLE_IOS(5_0);

代码示例:

代码结构:

其中,MainViewController添加为window的rootViewController,FirstViewController、SecondViewController、ThirdViewController就是三个简单的controller,设置不同的背景色即可,MainViewController的xib文件如下图:

MainViewController的viewDidLoad方法实现如下:

- (void)viewDidLoad
{
[super viewDidLoad]; FirstViewController * firstController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self addChildViewController:firstController]; SecondViewController * secondController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self addChildViewController:secondController]; ThirdViewController * thirdController = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[self addChildViewController:thirdController]; [contentView addSubview:firstController.view];//用于显示其它controller的view
currentController = firstController;
}

三个button的响应方法如下:

- (IBAction)onButtonClick:(id)sender {
FirstViewController * firstController = self.childViewControllers[];
SecondViewController * secondController = self.childViewControllers[];
ThirdViewController * thirdController = self.childViewControllers[];
NSInteger tag = ((UIButton *) sender).tag;
if ((currentController == firstController && tag == ) || (currentController == secondController && tag == ) || (currentController == thirdController && tag == )) {
return;
} UIViewController * oldController = currentController; switch (tag) {
case :{ [self transitionFromViewController:currentController toViewController:firstController duration: options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{} completion:^(BOOL finished) {
if (finished) {
currentController = firstController;
}
else {
currentController = oldController;
}
}];
break;
} case : {
[self transitionFromViewController:currentController toViewController:secondController duration: options:UIViewAnimationOptionTransitionFlipFromTop animations:^{} completion:^(BOOL finished) {
if (finished) {
currentController = secondController;
}
else {
currentController = oldController;
}
}];
break;
} case :{
[self transitionFromViewController:currentController toViewController:thirdController duration: options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{} completion:^(BOOL finished) {
if (finished) {
currentController = thirdController;
}
else {
currentController = oldController;
}
}];
break;
}
default:
break;
}
}

效果图:

     

最新文章

  1. MergeRecord_C++中map的使用
  2. 多层嵌套ajax同步
  3. C#小知识点
  4. 多个Tomcat同时运行环境配置 - imsoft.cnblogs
  5. Java再学习——停止一个正在运行的线程
  6. ios 后台模式
  7. 关于RunLoop
  8. SOFA 源码分析— 自定义路由寻址
  9. iOS开发之HTTP与HTTPS网络请求
  10. 027_git添加多账号设置
  11. spring boot 2.0.4 Redis缓存配置
  12. debian中完全删除mysql
  13. 步步为营-81-HttpModule(再谈Session)
  14. Java技能提升之路
  15. Linux 开机启动顺序_005
  16. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
  17. SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)
  18. OpenGL(3)-三角形
  19. java 获取指定日前的前一天
  20. Android 8 AudioPolicy 分析

热门文章

  1. Centos 查看内存
  2. shiro配置参考(一)
  3. VS2005调试无法进入断点,暂停、停止、重编按钮为灰色
  4. springBoot Feign
  5. Linux操作常识
  6. [thinkphp]查看thinkphp系统定义的常量值
  7. 小程序收集formid跳转后收集不到
  8. (15)oracle序列
  9. bzoj 5020: [THUWC 2017]在美妙的数学王国中畅游【泰勒展开+LCT】
  10. IO模型同步与异步阻塞与非阻塞的区别