建立父子关系
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];
*/