zoukankan      html  css  js  c++  java
  • 三种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
  • 相关阅读:
    ExtJs学习准备工作(二) firebug firefox插件的安装 全新时代
    Hibernate系统中调试SQL方式 全新时代
    Eclipse工程出现红叉导致无法编译的问题 全新时代
    javascript 取table中内容
    Asp.Net中清空所有textbox的几种方法
    SQL Server:使用系统存储过程实现的通用分页存储过程
    C# 检查网络是否连通
    sq分页原理
    SQL Server:日志备份和差异备份还原中的常见问题示例
    javascript:连接数据库
  • 原文地址:https://www.cnblogs.com/CoderWayne/p/4244429.html
Copyright © 2011-2022 走看看