iOS5 cambiando los antecedentes de UIToolbar

He leído la documentation de "Novedades en iOS 5" y se afirma que cambiar el background de algunos elementos de interfaz de usuario ahora es mejor compatible.

No pude encontrar la forma correcta para iOS 5 de cambiar la image de background de una barra de UITool. ¿Hay una forma especial nueva de iOS 5 de hacer esto? ¿O todavía tengo que subclamar el UIToolbar?

Sí, hay una nueva forma de hacer esto. Puede usar la appearance para hacer que todos los UIToolBar tengan el mismo aspecto.

Primero, debes asegurarte de que tu class sigue el protocolo UIAppearanceContainer . Aquí lo he hecho en el delegado de mi aplicación:

 @interface AppDelegate : UIResponder <UIApplicationDelegate, UIAppearanceContainer> @property (strong, nonatomic) UIWindow *window; @end 

Entonces puede configurar la apariencia en, por ejemplo, la application:didFinishLaunchingWithOptions: o viewDidLoad . Me gusta esto:

 UIImage *image = [UIImage imageNamed:@"myimage.png"]; [[UIToolbar appearance] setBackgroundImage:image forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault]; 

Solo tiene que hacer esto una vez para get la misma apariencia para todos los UIToolBar s en su aplicación. También puede configurar muchas (si no todas) las properties de su UIToolBar .

Como complemento, hay muchas classs que pueden seguir el protocolo UIAppearanceContainer . Para averiguar qué se puede personalizar con el protocolo de apariencia, puede abrir el file de encabezado de la class que desea personalizar, si puede establecer una propiedad con UIAppearance , entonces la propiedad tiene UI_APPEARANCE_SELECTOR escrito detrás de la statement de propiedad.

Aquí hay un gran tutorial: http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

Básicamente, se ve así:

 UIImage *gradientImage32 = [[UIImage imageNamed:@"surf_gradient_textunetworking_32"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsDefault];