三种ViewController跳转的异同

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion

MainVC *mainVC = [[MainVC alloc] init];

[self presentViewController:mainVC animated:YES completion:nil];

这种方式一般出现在需要使用者完成某件事情,如输入密码、增加资料等操作后,才能(回到跳转前的控制器)继续。例如系统的WIFI连接输入密码提示。默认动画是从下至上。

 

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

这种方式一般是使用者浏览资料,继而可以前进到下一个页面或回到上一个页面。默认动画是从右至左。

 

- (void)addChildViewController:(UIViewController *)childController

这个方法出现在iOS5以后,通过它即使不使用NavigationController也能够实现view hierarchy。有以下优点:

1.页面逻辑很清晰,相应的View对应相应的ViewController。
2.当某个子View没有显示时,将不会被Load,减少了内存的使用。
3.当内存紧张时,没有Load的View将被首先释放,优化了程序的内存释放机制。


#import  " ViewController.h "
#import  " FirstVC.h "
#import  " SecondVC.h "
#import  " ThirdVC.h "

@interface  ViewController ()
{
    FirstVC 
* firstVC;
    SecondVC 
* secondVC;
    ThirdVC 
* thirdVC;
}

@property (weak, nonatomic) IBOutlet UIView 
* contentView;

@property (strong, nonatomic) UIViewController 
* currentVC;


@end

@implementation  ViewController

- ( void )viewDidLoad {
    [super viewDidLoad];
   
//  Do any additional setup after loading the view, typically from a nib.
   
    firstVC 
=  [[FirstVC alloc] init];
    secondVC 
=  [[SecondVC alloc] init];
    thirdVC 
=  [[ThirdVC alloc] init];
   
    [self addChildViewController:firstVC];
    [self addChildViewController:secondVC];
    [self addChildViewController:thirdVC];
   
    [self.contentView addSubview:thirdVC.view];
   
    self.currentVC 
=  thirdVC;
}

- (IBAction)onClick:( id )sender {
   
if(self.currentVC==firstVC && [sender tag]== 1 ) {
       
return ;
    }
   
   
if(self.currentVC==secondVC && [sender tag]== 2 ) {
       
return ;
    }
   
   
if(self.currentVC==thirdVC && [sender tag]== 3 ) {
       
return ;
    }
   
    UIViewController 
*oldVC =  self.currentVC;
   
   
switch  ([sender tag]) {
       
case  1 : {
            [self transitionFromViewController:self.currentVC toViewController:firstVC duration:
1 options:UIViewAnimationOptionTransitionCurlUp animations:^ {
               
            } completion:
^ (BOOL finished) {
               
if (finished) {
                    self.currentVC 
=  firstVC;
                }
               
else  {
                    self.currentVC 
=  oldVC;
                }
            }];
        }
       
break ;
       
case  2 : {
            [self transitionFromViewController:self.currentVC toViewController:secondVC duration:
1 options:UIViewAnimationOptionTransitionCurlUp animations:^ {
               
            } completion:
^ (BOOL finished) {
               
if (finished) {
                    self.currentVC 
=  secondVC;
                }
               
else  {
                    self.currentVC 
=  oldVC;
                }
            }];
        }
       
break ;
       
case  3 : {
            [self transitionFromViewController:self.currentVC toViewController:thirdVC duration:
1 options:UIViewAnimationOptionTransitionCurlUp animations:^ {
               
            } completion:
^ (BOOL finished) {
               
if (finished) {
                    self.currentVC 
=  thirdVC;
                }
               
else  {
                    self.currentVC 
=  oldVC;
                }
            }];
        }
       
break ;
       
default :
           
break ;
    }
}

- ( void )didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
   
//  Dispose of any resources that can be recreated.
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值