// Recursively travel down the view tree, increasing the indentation level for children
- (void) dumpView: (UIView *) aView atIndent: (int) indent into:(NSMutableString *) outstring
{
for (int i = 0; i < indent; i++)
[outstring appendString:@"--"];
[outstring appendFormat:@"[%2d] %@\n", indent, [[aView class] description]];
for (UIView *view in [aView subviews])
[self dumpView:view atIndent:indent + 1 into:outstring];
}
// Start the tree recursion at level 0 with the root view
- (NSString *) displayViews: (UIView *) aView
{
NSMutableString *outstring = [[NSMutableString alloc] init];
[self dumpView: self.view.window atIndent:0 into:outstring];
return [outstring autorelease];
}
//=========================================================
// Return an exhaustive descent of the view's subviews
-(NSArray *)allSubviews:(UIView *)aView
{
NSArray *results = [aView subviews];
NSLog(@"%d", [results count]);
for (UIView *eachView in [aView subviews])
{
NSArray *riz = [self allSubviews:eachView];
if (riz) results = [results arrayByAddingObjectsFromArray:riz];
}
return results;
}
// Return all views throughout the application
-(NSArray *)allApplicationViews
{
NSArray *results = [[UIApplication sharedApplication] windows];
for (UIWindow *window in [[UIApplication sharedApplication] windows])
{
NSArray *riz = [self allSubviews:window];
if (riz) results = [results arrayByAddingObjectsFromArray: riz];
}
return results;
}
// Return an array of parent views from the window down to the view
-(NSArray *)pathToView:(UIView *)aView
{
NSMutableArray *array = [NSMutableArray arrayWithObject:aView];
UIView *view = aView;
UIWindow *window = aView.window;
while (view != window)
{
view = [view superview];
[array insertObject:view atIndex:0];
}
return array;
}
// Show the tree
- (void) displayViews
{
NSLog(@"%@",[self displayViews: self.view.window]);
//printf("Subviews of the main view:\n");
//NSLog(@"%@", [self allSubviews:self.view]);
printf("Path to each main subview:\n");
for (UIView *eachView in [self allSubviews:self.view])
NSLog(@"%@", [self pathToView:eachView]);
// More views than you could dream of!
//printf("\nAll window subviews:\n");
//NSLog(@"%@", [self allApplicationViews]);
}