Some helper methods in a Category for iOS's UIView class.
Objective-C
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
UIViewHelpers.xcodeproj
UIViewHelpers
UIViewHelpersTests
.gitignore
README.md
UIView+Helpers.h
UIView+Helpers.m

README.md

This is a growing collection of helper methods in a Category on UIView. Includes a collection of unit tests.

As of now, every method in this category is dedicated to recursing subviews of a UIView and testing each against a condition.

Say you wanted to find your application's "first responder." Using the category method firstSubviewPassingTest:, you could easily iterate all your application's subviews to locate the first responder.

-(UIView*)findCurrentFirstResponder {
    // Get the app's highest-level view
    UIView *rootView = [[[[UIApplication sharedApplication] keyWindow] rootViewController] view];
    
    // Recurse through all its subviews to find the first responder
    return [rootView firstSubviewPassingTest:^BOOL(UIView *subview) {
        if ([subview isKindOfClass:[UIResponder class]])
            return [(UIResponder*)subview isFirstResponder];
        else return NO;
    }];
}

Match subviews against a block -

Find the first subview of self for which the block test returns YES, and immediately cease recursion:

-(UIView*)firstSubviewPassingTest:(BOOL(^)(UIView *subview))test;

Collect all subviews of self for which the block test returns YES:

-(NSArray*)subviewsPassingTest:(BOOL(^)(UIView *subview, BOOL *stop))test;

Collect all subviews, (traversed to a maximum depth) of self for which the block test returns YES:

-(NSArray*)subviewsPassingTest:(BOOL(^)(UIView *subview, BOOL *stop))test
                      maxDepth:(NSInteger)depth;

Match subviews against a Class object - Collect all subviews of `self` that are of class `aClass`:
-(NSArray*)subviewsMatchingClass:(Class)aClass;

Collect all subviews of self (traversed to a maximum depth) of class aClass:

-(NSArray*)subviewsMatchingClass:(Class)aClass
                        maxDepth:(NSInteger)depth;

Collect all subviews of self that are subclasses, or members of class aClass:

-(NSArray*)subviewsMatchingClassOrSubclass:(Class)aClass;

Collect all subviews of self (traversed to a maximum depth) that are subclasses, or members of class aClass:

-(NSArray*)subviewsMatchingClassOrSubclass:(Class)aClass
                                  maxDepth:(NSInteger)depth;