ios5中UIViewController新使用方法 ( 添加多个子ViewController )

在iOS5中,ViewController中新添加了下面几个方法:


  1. addChildViewController;
  2.   
  3. removeFromParentViewController;  
  4. transitionFromViewController:toViewController:duration:options:animations:completion; 
  5. willMoveToParentViewController;  
  6. didMoveToParentViewController; 

下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后实现的效果:

ios5中UIViewController新使用方法 ( 添加多个子ViewController )_第1张图片

点击其中的按钮如下:

ios5中UIViewController新使用方法 ( 添加多个子ViewController )_第2张图片ios5中UIViewController新使用方法 ( 添加多个子ViewController )_第3张图片ios5中UIViewController新使用方法 ( 添加多个子ViewController )_第4张图片ios5中UIViewController新使用方法 ( 添加多个子ViewController )_第5张图片

下面详细介绍一下上述效果的实现:

  1. 创建项目,changeViewController。
  2. 添加相应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。如下图:

ios5中UIViewController新使用方法 ( 添加多个子ViewController )_第6张图片

3.把MainViewController添加到window中。


  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  4.     // Override point for customization after application launch.  
  5.     MainViewController *mainViewController=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];  
  6.     self.window.rootViewController=mainViewController;  
  7.     [self.window makeKeyAndVisible];  
  8.     return YES;  

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

5.在MainViewController中添加三个子controller


  1. #pragma mark – View lifecycle - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view from its nib.  
  5.      
  6.     FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];  
  7.     [self addChildViewController:firstViewController];  
  8.      
  9.     SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];  
  10.     [self addChildViewController:secondViewController];  
  11.      
  12.      
  13.     ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];  
  14.     [self addChildViewController:thirdViewController];  
  15.      
  16.     [contentView addSubview:thirdViewController.view];  
  17.     currentViewController=thirdViewController;  

其中要把其中的一个子controller的view添加到根视图中,这样才能显示出相应的视图。

一定要先addChildViewController后才addSubview,否则会出现问题的。

6.点击按钮,切换视图。


  1. -(IBAction)onClickbutton:(id)sender  
  2. {  
  3.     FirstViewController *firstViewController=[self.childViewControllers objectAtIndex:0];  
  4.     ThirdViewController *thirdViewController=[self.childViewControllers objectAtIndex:2];  
  5.     SecondViewController *secondViewController=[self.childViewControllers objectAtIndex:1];  
  6.     if ((currentViewController==firstViewController&&[sender tag]==1)||(currentViewController==secondViewController&&[sender tag]==2) ||(currentViewController==thirdViewController&&[sender tag]==3) ) {  
  7.         return;  
  8.     }  
  9.     UIViewController *oldViewController=currentViewController;  
  10.     switch ([sender tag]) {  
  11.         case 1:  
  12.         {  
  13.             NSLog(@"留言及回复");  
  14.             [self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{  
  15.             }  completion:^(BOOL finished) {  
  16.                 if (finished) {  
  17.                     currentViewController=firstViewController;  
  18.                 }else{  
  19.                     currentViewController=oldViewController;  
  20.                 }  
  21.             }];  
  22. }  
  23.             break;  
  24.         case 2:  
  25.         {  
  26.             NSLog(@"生日提醒");  
  27.             [self transitionFromViewController:currentViewController toViewController:secondViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromTop animations:^{  
  28.                  
  29.             }  completion:^(BOOL finished) {  
  30.                 if (finished) {  
  31.                   currentViewController=secondViewController;  
  32.                 }else{  
  33.                     currentViewController=oldViewController;  
  34.                 }  
  35.             }];  
  36.         }  
  37.             break;  
  38.         case 3:  
  39.         {  
  40.             NSLog(@"好友申请");  
  41.             [self transitionFromViewController:currentViewController toViewController:thirdViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{  
  42.                  
  43.             }  completion:^(BOOL finished) {  
  44.                 if (finished) {  
  45.                      currentViewController=thirdViewController;  
  46.                 }else{  
  47.                     currentViewController=oldViewController;  
  48.                 }  
  49.             }];  
  50.         }  
  51.             break;  
  52.         default:  
  53.             break;  
  54.     }  

其中我把按钮设置成不同的tag了。

这时候点击按钮,就可以切换子视图了。

这样写的好处: 多个UIViewController之间切换可以添加动画 当内存警告的时候,可以把当前不是激活状态的ViewController内存释放。

你可能感兴趣的:(ios5中UIViewController新使用方法 ( 添加多个子ViewController ))