Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
An Objective-C category on UIView that allows execution of a block on all subviews
branch: master

This branch is 1 commit behind egold:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


An Objective-C category on UIView that allows execution of a block on all subviews


  1. Add UIView+SubviewRecursion.h and UIView+SubviewRecursion.m to your project
  2. Make sure UIView+SubviewRecursion.m is part of your build target
  3. Import UIView+SubviewRecursion.h whereever you wish to execute a block recursively on all subview of a view


Simply call -[UIView runBlockOnAllSubviews:] in your view controllers. The block has access to each UIView (or descendant) object, so you can do things like hide / show, enable / disable, etc. very easily.

There are also a couple of convenient methods that showcase certain common use cases, like disabling or enabling all controls in a hierarchy. (For instance, to disable controls from being accidentally touched when they are part of a page being turned in a UIPageViewController)


To quickly disable all controls (buttons, text fields) in a view hierarchy:

#import "UIView+SubviewRecursion.h"

@implementation MyFancyViewController

    [self.view runBlockOnAllSubviews:^(UIView *view) {

        view.backgroundColor = [UIColor greenColor];

    [self.view disableAllControlsInViewHierarchy];



I first created this category while building an iPad app for One Kings Lane. Our specific need was to disable buttons (and other controls) while an animation was in-flight, and enable all controls after the animation completed. This was to prevent errant taps on controls during the animation sequence.

Something went wrong with that request. Please try again.