美文网首页iOS 的那些事儿
iOS UINavigationController里的push

iOS UINavigationController里的push

作者: 小沫360 | 来源:发表于2016-03-28 14:21 被阅读2166次

    navigationcontroller里push和pop是这么回事?

    push操作

    我们每次执行下面的代码推出一个新的控制器

    [self.navigationController pushViewController:vc animated:YES];
    
    

    这句话的时候,系统到底干了什么?其实系统是这么做的。

    //self相当于navigationController
    
     [self addChildViewController:vc];                 
     
     vc.view.frame =self.view.frame; 
     
     [self.view addSubview:vc.view];
     
     [vc didMoveToParentViewController:self];          
     
    
    1. navigationcontroller将vc1这个controller添加作为自己的子视图控制器。

    2. 设置vc这个视图控制器里根view的frame。

    3. 把vc.view添加到navigationcontroller.view上。

    4. 用didMoveToParentViewController这个方法通知已经push完毕。

    pop操作

    每次执行下面的代码返回到上一个控制器

    [self.navigationController popViewControllerAnimated:YES]
    
    

    上面的这句代码同样可以拆分成下面的3步,

    [vc willMoveToParentViewController:nil];  
    
    [vc.view removeFromSuperview];            
    
    [vc removeFromParentViewController];
    
    
    
    1. 用willMoveToParentViewController这个方法,并把参数设置为nil,通知vc即将被移除父视图控制器。

    2. 把vc.view移除出父视图控制器的view。

    3. 然后用removeFromParentViewcontroller这个方法把vc彻底移除当前控制器。

    iOS里面的抽屉(path)效果,就是根据这个原理实现的。

    demo下载请戳这里

    相关文章

      网友评论

        本文标题:iOS UINavigationController里的push

        本文链接:https://www.haomeiwen.com/subject/iymjlttx.html