三种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
时间: 2024-10-10 23:30:02

三种ViewController跳转的异同的相关文章

Android开发——三种活动跳转方式

Android开发——三种活动跳转方式 1. 点击控件跳转 这里用 Button 举例,在布局文件中创建 Button 按钮,在再源码文件中写入活动跳转代码: Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainAc

(转)JSP三种页面跳转方式的比较

使用JSP大约有下列三种跳转方式: 1. response.sendRedirect(); 2. response.setHeader("Location",""); 3. <jsp:forward page="" /> 经过试验得到下面的一些规则: 一. response.sendRedirect() 此语句前不允许有out.flush(),如果有out.flush(),会有异常: java.lang.IllegalStateExc

三种页面跳转方式

1.<meta>跳转 <meta http-equiv="refresh" content="5;url=helloword.html"> 5秒后 跳转到helloword.html页面 2.javascript跳转 slef.location='helloword.html://直接跳转 setTimeout("javascript:location.herf='helloword.html',5000");//定时跳转

asp.net跳转页面的三种方法比较

目前,对于学习asp.net的很多朋友来讲,实现跳转页面的方法还不是很了解.本文将为朋友们介绍利用asp.net跳转页面的三种方法,并对其之间的形式进行比较,希望能够对朋友们有所帮助. ASP.NET发展起源 1 ASP.NET的前身ASP技术,是在IIS 2.0上首次推出(Windows NT 3.51),当时与 ADO 1.0 一起推出,在IIS 3.0 (Windows NT 4.0)发扬光大,成为服务器端应用程序的热门开发工具,微软还特别为它量身打造了Visual InterDev开发工

C#中三种定时器对象的比较

·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers.Timer类里 System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的.它的主要缺点是计时不精确,而且必须有消息循环,Console Applicati

C#三种定时器的实现

·关于C#中timer类 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Threading.Timer类里 3.定义在System.Timers.Timer类里 System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中 的Timer控件,内部使用API SetTimer实现的.它的主要缺点是计时不精确,而且必须有消息循环,Console Appli

iOS中的视图跳转的三种方式(代码跳转,根据桥跳转,按钮跳转)

#import "ViewController.h" #import "SecondViewController.h" @interface ViewController () @property (retain, nonatomic) IBOutlet UITextField *textField; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // D

iOS开发 跳转场景的三种方式

假设A跳转到B,三种方法: 1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任何代码,在A上点击Button就会跳转到B 2. 按住ctrl键,拖动A上的View Controller到B上,弹出菜单,选择Modal,两个场景间自动添加连接线和图标,选中该图标,打开Storyboard Segue,identifier输入一个标识符,这里以”aaaa”为例.A里需要跳转时,执行下面的代码: 1 [self performSegueWithId

Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同

一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个值:" id="txt"/> <input type="button" value="按钮" id="btn"/> <script> var txt=document.getElementB