The other day, I found this this Stack Overflow question about iOS 5’s UIAppearance protocol. One of the things that the poster was looking for, was a list of classes that support UIAppearance proxies.

Is there a list of all classes that are manipulatable with the appearance property?

Until now, there was no such list, but I used a little grep magic to change that. To find the public headers, I secondary-clicked on a Foundation header in Xcode and asked Xcode to show the file in Finder. I ran the following command the iOS SDK directory which contains all of the public headers. (I could have arguably constrained my search to the UIKit directory, but whatever.)


According to the selected answer, any UIKit property that supports UIAppearance is going to have UI_APPEARANCE_SELECTOR tacked on to the end of its method prototype. That grep command pulls out the files that contain the relevant method declaration and out them into the file UI_APPEARANCE.txt on my desktop. There are at least 14 UIKit classes that support UIAppearance proxies for at least one of their properties. Those classes are:

  • UIActivityIndicatorView.h
  • UIBarButtonItem.h
  • UIBarItem.h
  • UINavigationBar.h
  • UIProgressView.h
  • UISearchBar.h
  • UISegmentedControl.h
  • UISlider.h
  • UISwitch.h
  • UITabBar.h
  • UITabBarItem.h
  • UIToolbar.h

Interestingly, UIView claims to conform to UIAppearance, so any subclass of UIView can potentially implement UIAppearance support.

You can see the results of the grep command by clicking here.