2014-09-05 50 views
0

我想写一个文本文件,其中包含所有视图的名称在屏幕上。例如 我有一个UIView中,我有2 UIButtons因此该文件应作为波纹管..编写UIView层次

UIWindow 
    UIView 
     UIButton 
      UIButtonLabel 
     UIButton 
      UIButtonLabel 
     _UILayoutGuide 
     _UILayoutGuide 

这是我正在试图做的,但上面的层次,我无法做到。

-(void) writeViewHierarchyForView:(UIView *)aView inString:(NSMutableString *)str 
{ 
    //NSMutableString *str = [[NSMutableString alloc] init]; 
    NSLog(@"title Text = %@", aView.titleText); 
    if(nil == aView.children){ 
     [str appendString:@"\n"]; 
     return; 
    } 
    else{ 
     for(UIView *view in aView.subview){ 
      [str appendString:@"\n\t"]; 
      [str appendString:view.name]; 
      NSLog(@"%@",view.name); 
      [str appendString:@"\t"]; 
      [self writeViewHierarchyForView:view inString:str]; 
     } 
    } 
} 

这不是我在任何项目中使用的东西,而是为了好玩而做的。 任何建议都会很棒。

+0

为(UIView的*在[self.view子视图]视图){。 ..} 这个你会在一个视图中获得所有子视图。因此,当你从一个视图移动到另一个关于这些子视图的搜索,并执行你的操作 – nikhil84 2014-09-05 11:57:05

+0

@ walle84问题不是获取子视图,我知道我们已经有了这个方法。但问题是将这些子视图名称转储到文本文件中,根据层次结构级别(有问题提及)。 – Suryakant 2014-09-05 12:09:27

回答

2

您可能无法使用以下代码将应用程序提交给应用商店(这听起来像您不想要反正),因为它是未公开的私有API,但您可以在调试中使用它:

NSLog(@"%@", [self.view valueForKey:@"recursiveDescription"]);

你也可以使用recursiveDescription在LLDB控制台进行调试,当你在一个断点:

po [someView recursiveDescription]

+0

是的,我不打算提交任何应用程序与此代码,这是我正在寻找..谢谢。 – Suryakant 2014-09-08 04:44:20