iOS 5中UIViewController
来源:互联网 发布:vb连接oracle 编辑:程序博客网 时间:2024/05/22 13:43
UIViewController在MVC中扮演着控制层的角色,它的基础功能是管理界面中的每一个view,从而控制数据的传输和界面的展示,关于UIViewController的使用技巧大家可以参看这篇文章。但是,今天我们主要介绍一下在iOS 5中UIViewController的一些新使用方法。
下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这 些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。
在iOS5中,ViewController中新添加了下面几个方法:
addChildViewController: removeFromParentViewController transitionFromViewController:toViewController:duration:options:animations:completion: willMoveToParentViewController: didMoveToParentViewController:下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这 些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后实现的效果:
点击其中的按钮如下:
下面详细介绍一下上述效果的实现:
- 创建项目,changeViewController。
- 添加相应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。如下图:
- 把MainViewController添加到window中。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. MainViewController *mainViewController=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; self.window.rootViewController=mainViewController; [self.window makeKeyAndVisible]; return YES; }
- 在MainViewController中添加三个按钮,并且连接onClickbutton方法。
- 在MainViewController中添加三个子controller
#pragma mark – View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; [self addChildViewController:firstViewController]; SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; [self addChildViewController:secondViewController]; ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil]; [self addChildViewController:thirdViewController]; [contentView addSubview:thirdViewController.view]; currentViewController=thirdViewController; }
其中要把其中的一个子controller的view添加到根视图中,这样才能显示出相应的视图。 - 点击按钮,切换视图。
-(IBAction)onClickbutton:(id)sender { FirstViewController *firstViewController=[self.childViewControllers objectAtIndex:0]; ThirdViewController *thirdViewController=[self.childViewControllers objectAtIndex:2]; SecondViewController *secondViewController=[self.childViewControllers objectAtIndex:1]; if ((currentViewController==firstViewController&&[sender tag]==1)||(currentViewController==secondViewController&&[sender tag]==2) ||(currentViewController==thirdViewController&&[sender tag]==3) ) { return; } UIViewController *oldViewController=currentViewController; switch ([sender tag]) { case 1: { NSLog(@"留言及回复"); [self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ } completion:^(BOOL finished) { if (finished) { currentViewController=firstViewController; }else{ currentViewController=oldViewController; } }]; } break; case 2: { NSLog(@"生日提醒"); [self transitionFromViewController:currentViewController toViewController:secondViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromTop animations:^{ } completion:^(BOOL finished) { if (finished) { currentViewController=secondViewController; }else{ currentViewController=oldViewController; } }]; } break; case 3: { NSLog(@"好友申请"); [self transitionFromViewController:currentViewController toViewController:thirdViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{ } completion:^(BOOL finished) { if (finished) { currentViewController=thirdViewController; }else{ currentViewController=oldViewController; } }]; } break; default: break; } }
其中我把按钮设置成不同的tag了。
这时候点击按钮,就可以切换子视图了。
这样写的好处: 多个UIViewController之间切换可以添加动画 当内存警告的时候,可以把当前不是激活状态的ViewController内存释放。
可以把代码更好分开 项目源代码:http://easymorse-iphone.googlecode.com/svn/trunk/changeViewController/
0 0
- IOS中UIViewController小结
- IOS中UIViewController的生命周期
- iOS 5中UIViewController
- IOS中 UIView和UIViewController的区别
- iOS: 在UIViewController 中添加Static UITableView
- iOS-UIViewController
- IOS UIViewController
- ios UIViewController
- IOS UIViewController
- iOS UIViewController
- iOS学习笔记5-UIViewController(1)
- iOS 6.0中UIViewController被弃用的一些方法
- iOS 6.0中UIViewController被弃用的一些方法
- iOS 6.0中UIViewController被弃用的一些方法
- iOS 6.0中UIViewController被弃用的一些方法
- iOS 6.0中UIViewController被弃用的一些方法
- iOS 6.0中UIViewController被弃用的一些方法
- iOS 6.0中UIViewController被弃用的一些方法
- 03-4. 成绩转换
- android拍照获得图片及获得图片后剪切设置到ImageView
- Hadoop自定义数据类型编程练习
- 懒人日记 之 自己到底有多懒
- Hadoop到底能做什么?怎么用hadoop?
- iOS 5中UIViewController
- vijos 1042 捕风捉影
- 【Java加密解密】PBE算法
- 【JavaScript】JavaScript的对象-对象专门语句
- Windows下QT Creator配置protobuf
- RMQ问题的Sparse-Table算法
- 将Python脚本文件包装成可执行文件
- struct结构体基础知识
- 关于IOS数据操作方式详解(一)— XML数据解析