addChildViewController、removeFromParentViewController等语法

来源:互联网 发布:mp3剪切大师软件 编辑:程序博客网 时间:2024/05/22 03:12

在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。如下图:


3.把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; 
}

4.在MainViewController中添加三个按钮,并且连接onClickbutton方法。

5.在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添加到根视图中,这样才能显示出相应的视图。

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://wangjun.easymorse.com/?p=1630

0 0
原创粉丝点击