遍历子视图

来源:互联网 发布:南风知我意陆西洲免费 编辑:程序博客网 时间:2024/04/29 08:23

        开发过程中,我们经常需要查看一个视图及其子视图的层级关系,这里提供两个方法:

        1)递归遍历

        对于一个视图rootview,我们可以通过UIView的方法subviews获取到它的直接子视图,

        这里有一点需要注意,[rootview subviews]返回的子视图数组是rootview的直接子视图,即数组里面每个视图在视图层级树中与rootview有直接的父子关系,且子视图数组里面并不包含rootview本身(注意和数学中集合的子集进行区别),数组中的顺序从小到大对应视图层级的从底部(bottom)到顶端(top)

        基于以上说明,我们可以利用递归的思想遍历获取rootview的所有直接和非直接的子视图

/** *@brief递归遍历 * *@param rootView 当前视图节点 *@param floor 当前视图节点在视图层级树中的层数索引 */- (void)view:(UIView *)rootView floor:(NSInteger)floor{    NSLog(@"<%@>-第%i层",[rootView class],floor);    floor++;    for (UIView *v in [rootView subviews])    {        [self view:v floor:floor];    }}

        2)利用recursiveDescription方法

        UIView有一个私用方法recursiveDescription,配合po(print-object)命令可以打印出视图的层级关系

po [rootview recursiveDescription]