转:iOS5中UIViewController新方法的使用
2012-01-14 22:06 张智清 阅读(1731) 评论(0) 编辑 收藏 举报在iOS5中,ViewController中新添加了下面几个方法:
- addChildViewController:
- removeFromParentViewController:
- transitionFromViewController:toViewController:duration:options:animations:completion:
- willMoveToParentViewController:
- didMoveToParentViewController:
下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewController要想显示出来,需要把子controller的视图添加到父视图的相应位置,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后的实现效果:
点击其中的按钮如下:
下面详细介绍一下上述效果的实现:
1. 创建项目,changeViewController。
2. 添加相应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。如下图:
3. 把MainViewController添加到window中。
-(BOOL)application:(UIApplication *)application didFinishLauchingWithOptions:(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;
}
4. 在MainViewController的视图中添加三个按钮,并且连接onClickButton方法。
5. 在MainViewController中添加三个子controller
- (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添加到根视图中,这样才能显示出相应的视图。
6. 点击按钮,切换视图。
- (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/
本文转载自: http://wangjun.easymorse.com/?p=1630
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架