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;