使用递归方法获取某个子视图的所有子视图,并有层次的打印出来。
代码示例
// 子视图 UIView *view0 = [[UIView alloc] initWithFrame:CGRectMake(10.0, 10.0, 10.0, 10.0)]; [self.view addSubview:view0]; // UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(10.0, 40.0, 100.0, 60.0)]; [self.view addSubview:view1]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 40.0, 30.0)]; [view1 addSubview:label]; UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake(70.0, 30.0, 30.0, 30.0)]; [view1 addSubview:imageview]; UITextField *textfield = [[UITextField alloc] initWithFrame:CGRectMake(0.0, 30.0, 70.0, 30.0)]; [view1 addSubview:textfield]; // UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(10.0, 60.0, 100.0, 100.0)]; [self.view addSubview:view2]; UIImageView *view21 = [[UIImageView alloc] initWithFrame:CGRectMake(10.0, 10.0, 80.0, 80.0)]; [view2 addSubview:view21]; UILabel *view22 = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 10.0, 60.0, 60.0)]; [view21 addSubview:view22]; UIButton *view23 = [[UIButton alloc] initWithFrame:CGRectMake(10.0, 10.0, 40.0, 40.0)]; [view22 addSubview:view23]; UITextView *view24 = [[UITextView alloc] initWithFrame:CGRectMake(10.0, 10.0, 20.0, 20.0)]; [view23 addSubview:view24];
// 递归获取子视图(level从1开始) - (void)showSubview:(UIView *)view level:(int)level { for (UIView *subview in view.subviews) { // 根据层级决定前面空格个数,来缩进显示 NSString *blank = @""; for (int i = 1; i < level; i++) { blank = [NSString stringWithFormat:@" %@", blank]; } // 打印子视图类名 NSLog(@"%@%d: %@", blank, level, subview.class); if ([subview isKindOfClass:[UITextField class]] || [subview isKindOfClass:[UITextView class]]) { NSLog(@"%@%d: %@", blank, level, @(YES)); } // 递归获取此视图的子视图 [self showSubview:subview level:(level + 1)]; } }
- (void)click { // 打印所有子视图 // [self showSubview:self.navigationController.navigationBar level:1]; [self showSubview:self.view level:1]; }
打印结果
2018-06-05 23:06:40.146491+0800 DemoSubviews[3608:297071] 1: UIView 2018-06-05 23:06:40.146863+0800 DemoSubviews[3608:297071] 1: UIView 2018-06-05 23:06:40.147185+0800 DemoSubviews[3608:297071] 2: UILabel 2018-06-05 23:06:40.147382+0800 DemoSubviews[3608:297071] 2: UIImageView 2018-06-05 23:06:40.147709+0800 DemoSubviews[3608:297071] 2: UITextField 2018-06-05 23:06:40.147975+0800 DemoSubviews[3608:297071] 2: 1 2018-06-05 23:06:40.148235+0800 DemoSubviews[3608:297071] 3: _UITextFieldContentView 2018-06-05 23:06:40.148628+0800 DemoSubviews[3608:297071] 1: UIView 2018-06-05 23:06:40.148874+0800 DemoSubviews[3608:297071] 2: UIImageView 2018-06-05 23:06:40.149139+0800 DemoSubviews[3608:297071] 3: UILabel 2018-06-05 23:06:40.149345+0800 DemoSubviews[3608:297071] 4: UIButton 2018-06-05 23:06:40.149696+0800 DemoSubviews[3608:297071] 5: UITextView 2018-06-05 23:06:40.150062+0800 DemoSubviews[3608:297071] 5: 1 2018-06-05 23:06:40.150556+0800 DemoSubviews[3608:297071] 6: _UITextContainerView 2018-06-05 23:06:40.150916+0800 DemoSubviews[3608:297071] 6: UIImageView 2018-06-05 23:06:40.151277+0800 DemoSubviews[3608:297071] 6: UIImageView