How to list out all the subviews in a uiviewcontroller in iOS? How to list out all the subviews in a uiviewcontroller in iOS? ios ios

How to list out all the subviews in a uiviewcontroller in iOS?


You have to recursively iterate the sub views.

- (void)listSubviewsOfView:(UIView *)view {        // Get the subviews of the view    NSArray *subviews = [view subviews];    for (UIView *subview in subviews) {                // Do what you want to do with the subview        NSLog(@"%@", subview);        // List the subviews of subview        [self listSubviewsOfView:subview];    }}


The xcode/gdb built-in way to dump the view hierarchy is useful -- recursiveDescription, per http://developer.apple.com/library/ios/#technotes/tn2239/_index.html

It outputs a more complete view hierarchy which you might find useful:

> po [_myToolbar recursiveDescription]<UIToolbarButton: 0xd866040; frame = (152 0; 15 44); opaque = NO; layer = <CALayer: 0xd864230>>   | <UISwappableImageView: 0xd8660f0; frame = (0 0; 0 0); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xd86a160>>


Elegant recursive solution in Swift:

extension UIView {    func subviewsRecursive() -> [UIView] {        return subviews + subviews.flatMap { $0.subviewsRecursive() }    }}

You can call subviewsRecursive() on any UIView:

let allSubviews = self.view.subviewsRecursive()