EnamelPot

自律在于今天和明天之间

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.在ios5中,ViewController中新添加1个属性和5个方法

@property(nonatomic,readonly) NSArray *childViewControllers

- (void)addChildViewController:(UIViewController *)childController
- (void) removeFromParentViewController
- (void)transitionFromViewController::::::
- (void)willMoveToParentViewController:(UIViewController *)parent
- (void)didMoveToParentViewController:(UIViewController *)parent

childViewControllers:一个数组,里面是子vc。 

addChildViewController:向视图控制器容器中添加子视图控制器

removeFromParentViewController:从父视图控制器中删除

transitionFromViewController:交换两个子视图控制器的位置(由于添加的顺序不同,所以子试图控制器在父视图控制器中存在层次关系)

  • fromViewController:当前显示的子试图控制器,将被替换为非显示状态
  • toViewController:将要显示的子视图控制器
  • duration:交换动画持续的时间,单位秒
  • options:动画的方式
  • animations:动画Block
  • completion:完成后执行的Block

willMoveToParentViewController:当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用

  • parent:父视图控制器,如果没有父视图控制器,将为nil
  • 当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:
  • 当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。

didMoveToParentViewController:当从一个视图控制容器中添加或者移除viewController后,该方法被调用。

  • parent:父视图控制器,如果没有父视图控制器,将为nil
  • 在调用addChildViewController方法加入子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。
  • removeFromParentViewController 方法会自动调用了该方法,所以,删除子控制器后,不需要在显示的调用该方法了。

小结一下:

(add+did)[被加入的子视图控制器 didMoveToParentViewController:父视图控制器];
(will+transition+did)[子视图控制器 willMoveToParentViewController:nil] transition [子视图控制器 didMoveToParentViewController:父视图控制器];
(will+remove)[被删除的子试图控制器 willMoveToParentViewController:nil];

2.Dome:一个mainVC中自带2个按钮 按钮控制2个vc的切换。

1.在appDelegate中设置rootviewcontroller为mainVC

self.window.rootViewController = [[mainViewController alloc]initWithNibName:nil bundle:nil];

 2.在mainVC中设置2个按钮 

UIButton *fristButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 20, 160, 40)];
fristButton.backgroundColor = [UIColor yellowColor];
[fristButton addTarget:self action:@selector(toShowTheFristViewController) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:fristButton];
 
UIButton *secondButton = [[UIButton alloc]initWithFrame:CGRectMake(160, 20, 160, 40)];
secondButton.backgroundColor = [UIColor blueColor];
[secondButton addTarget:self action:@selector(toShowTheSecondViewController) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:secondButton];

 

 3.新建所有的子vc,addChildViewController进mainVC,new一个UIView,在其中addSubview想要展示的第一个vc的view

FristViewController *fVC=[[FristViewController alloc]initWithNibName:nil bundle:nil];
[self addChildViewController:fVC];    
SecondViewController *sVC=[[SecondViewController alloc]initWithNibName:nil bundle:nil];
[self addChildViewController:sVC]; 
[mainView addSubview:fVC.view];

4.添加2个按钮方法

-(void)toShowTheFristViewController
{
   NSLog(@"显示第一个vc");
   [[self.childViewControllers objectAtIndex:1] willMoveToParentViewController:nil];
   [self transitionFromViewController:[self.childViewControllers objectAtIndex:0]
           toViewController:[self.childViewControllers objectAtIndex:1]
           duration:0.3
           options:UIViewAnimationOptionTransitionFlipFromLeft
           animations:^{}
           completion:^(BOOL finished) {                
           }];
   [[self.childViewControllers objectAtIndex:0] didMoveToParentViewController:self];
}
-(void)toShowTheSecondViewController
{
   NSLog(@"显示第二个vc");
   [[self.childViewControllers objectAtIndex:0] willMoveToParentViewController:nil];
   [self transitionFromViewController:[self.childViewControllers objectAtIndex:1]
                     toViewController:[self.childViewControllers objectAtIndex:0]
                             duration:0.3
                              options:UIViewAnimationOptionTransitionFlipFromLeft
                           animations:^{}
                           completion:^(BOOL finished) {                                
                           }];
   [[self.childViewControllers objectAtIndex:1]didMoveToParentViewController:self];
}

 

 

 

 

 

 

 

 

 

posted on 2013-12-09 15:50  EnamelPot  阅读(1936)  评论(0编辑  收藏  举报