建立父子关系

UIView * greenView = [[UIView alloc] init];
    建立父子关系的同时,这个addSubview内部还干了什么其他事情? 会在父亲视图中,保存一个子视图的强指针
    [baseView addSubview:greenView];
     // greenView.frame = baseView.bounds;(从addsubview中可得)
    greenView.backgroundColor = [UIColor greenColor];
    self.greenView = greenView;
    使用tag作为视图的临时标记,方便在父亲对象中直接找到该子视图
    greenView.tag = 10;

 

这两个方法都是有由 系统自动调用

调用了父子addsubview方法之后就会调用,并且,会将新的父控件对象,作为参数,传递进来,那么在该方法中,就可以使用父亲对象的一些属性作为参考

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
   设置自己的Frame与父亲组件完全重合
    self.frame = newSuperview.bounds;    
}
这个方法,在子视图,已经完成添加,显示之后会调用
- (void)didMoveToSuperview
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
}
- (void)didAddSubview:(UIView *)subview
{
    完成添加之后调用
}
- (void)willRemoveSubview:(UIView *)subview
{
    执行了removeFromSuperView 即将删除子控件的时候调用,并且会把即将删除的子控件对象作为参数传递进来
}


 

插入一个视图

 [self.baseView insertSubview:yellowView atIndex:0];

把新添加的视图,放到某一个视图的后面

   [self.baseView insertSubview:yellowView belowSubview:greenView];

  把新添加的视图,放到某一个视图的前面

   [self.baseView insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>]

 



把某一个视图放到最上层显示

    [self.baseView bringSubviewToFront:self.greenView];

    

把某一个视图,挪到最后面

    [self.baseView sendSubviewToBack:self.yellowView];

      解除父子关系,removeFromSuperview

      子控件自己与父亲解除关系  [self.greenView removeFromSuperview];

     父亲控件与子控件解除父子关系

/*
    //1.获得子控件
     //数组中保存对象的指针,默认是对象的强指针,所以每次调用addSubView方法,都会将该对象的强指针保存到subviews数组中,掉removeFromSuperview方法,会将自己保存在父亲subViews数组中的强指针移除,如果外界再没有强指针指向的话,就会被系统回收
    NSArray * subViews = [self.baseView subviews]; //获得被自己管理的所有子控件对象
    for(UIView * tmpView in subViews)
    {
2.取出每一个子视图,并且与父亲解除父子管理关系
        [tmpView removeFromSuperview];
    }
    */
    
    /*
    //通过viewWithTag 找到具体的一个子视图
    //这种方式,不见在实际的开发中过多的使用,因为用数字作为标记,意义不是很明确,而且容易忘记
    UIView * greenView = [self.baseView viewWithTag:10];
    [greenView removeFromSuperview];
 
    */