2014-09-05 84 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