iOS开篇——UI之UIViewController

UIViewController的生命周期

- (void)loadView{}  用于创建self.view

- (void)viewDidLoad{} self.view创建完毕

- (void)viewWillAppear:(BOOL)animated{}视图即将显示

- (void)viewDidAppear:(BOOL)animated{} 视图已经显示

- (void)viewWillDisappear:(BOOL)animated{} 视图即将消失

- (void)viewDidDisappear:(BOOL)animated{} 视图已经消失

- (void)didReceiveMemoryWarning{} 内存不足 警告

视图之间的模态跳转

    //在这里进行模态跳转
    
    SecondViewController * secondVC = [[SecondViewController alloc]init];

    //设置跳转模式 样式
    secondVC.modalTransitionStyle =UIModalTransitionStylePartialCurl;

    /*
     typedef NS_ENUM(NSInteger, UIModalTransitionStyle) {
     UIModalTransitionStyleCoverVertical = 0,   //向上覆盖
     UIModalTransitionStyleFlipHorizontal __TVOS_PROHIBITED,  //翻转
     UIModalTransitionStyleCrossDissolve,    //渐变
     UIModalTransitionStylePartialCurl NS_ENUM_AVAILABLE_IOS(3_2)  //翻页__TVOS_PROHIBITED,
     };
     */


   //下面是进行模态跳转
    //第一个参数 是要跳转到的视图控制器
    //第二个是 动画的有无
    //第三个是一个block 作用为跳转完成后的回调 完成后执行block
    [self presentViewController:secondVC animated:NO completion:^{
        NSLog(@"跳转完成");
    }];
    //模态回跳
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"回跳完成");
    }];

设置自定义的动画

//导入头文件
#import <QuartzCore/QuartzCore.h>    
//创建一个动画
    CATransition * transition = [[CATransition alloc]init];
    //设置动画时间
    transition.duration = 0.3;
    //设置动画
    //跳转方向
    transition.subtype = @"fromRight";
    //跳转类型
    transition.type = @"push";//cameraIres
    
    [self.view.superview.layer addAnimation:transition forKey:nil];

视图容器   相当于rootVC下还有两个视图控制器对象

//创建三个视图控制器对象
    //设定rootVC为容器视图控制器
    
    RootViewController * rootVC = [[RootViewController alloc]init];
    FirstViewController * firstVC = [[FirstViewController alloc]init];
    SecondViewController * secondVC = [[SecondViewController alloc]init];
    //添加视图控制器
    [rootVC addChildViewController:firstVC];
    [rootVC addChildViewController:secondVC];
    
    //把容器视图控制器设置为根视图
    _window.rootViewController = rootVC;

容器内视图控制器的跳转

    //点击按钮 跳到第二个子视图控制器
    
    //第一个参数 执行跳转的视图控制器
    //第二个参数 要跳转到的
    //第三个 时间
    //第五个 动画
    //第六个 回调
    [self.parentViewController transitionFromViewController:self toViewController:self.parentViewController.childViewControllers[1] duration:1 options:0 animations:nil completion:nil];
    //跳转回第一个视图控制器
    [self.parentViewController transitionFromViewController:self toViewController:self.parentViewController.childViewControllers[0] duration:1 options:0 animations:nil completion:nil];

//设置是否旋转

- (BOOL)shouldAutorotate{
    return YES;
}

视图控制器之间的传值

正向传值    用下一个视图控制器对象中的属性接收即可  

反向传值    需要用代理传值   

如视图控制器 1 2 3 

1 2 3模态跳转再回跳

1——>2——>3 跳转的时候 给暴露出的属性直接传值

1<——2<——3  3制订协议 2为3的代理实现协议方法接收传来的值     2再制定协议 1遵守协议为2的代理 实现协议方法 接收传来的值。

    //1跳2
    SecondViewController * secondVC = [[SecondViewController alloc]init];
    secondVC.str = @"我是第一个视图控制器传来的";
    secondVC.delegate = self;
    [self presentViewController:secondVC animated:YES completion:nil];



    //2跳3
    ThirdViewController * thirdVC = [[ThirdViewController alloc]init];
    thirdVC.str = _str;
    thirdVC.delegate = self;
    [self presentViewController:thirdVC animated:YES completion:nil];



    //3回跳2
    if ([_delegate respondsToSelector:@selector(receiveString:)]) {
        [_delegate receiveString:@"我是第三个视图控制器传来的"];
    }
    [self dismissViewControllerAnimated:YES completion:nil];



    //2回跳1
    if ([_delegate respondsToSelector:@selector(receiveString:)]) {
        [_delegate receiveString:_backStr];
    }
    [self dismissViewControllerAnimated:YES completion:nil];
原文地址:https://www.cnblogs.com/gwkiOS/p/4979628.html