美文网首页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