您的位置:首页 > 其它

三种ViewController跳转的异同

2016-02-27 19:39 302 查看
- (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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: