2012-09-25 17 views
18

Estoy utilizando el método appearanceWhenContainedIn en ciertos elementos de la interfaz de usuario que quiero personalizar en mi aplicación iOS 6. El problema que nos encontramos es que ninguno de mis personalizaciones se aplican si trato de proporcionar más de una clase de contenedor, así:apariencia de iOS 6 cuando está en varias clases

// Works neither for toolbar nor navbar items 
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil] 

// Works fine (but only for navbar items, obviously) 
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 

Los documentos oficiales dicen que el parámetro de este método puede ser una lista nula terminados de clases múltiples, pero en mi caso nunca funciona como debería. ¿Me estoy perdiendo de algo?

Respuesta

43

A partir de los documentos:

appearanceWhenContainedIn:

...

El proxy apariencia para el receptor en un determinado contención jerarquía.

Que en realidad significa que la lista nil terminados no define la lista de las clases de contenedores para UIBarButtonItem, pero jerarquía contenedor de arriba a abajo, de modo

[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil] 

rendimientos apariencia proxy para UIBarButtonItem que está dentro UINavigationBar , y UINavigationBar a su vez está dentro de UIToolbar.

o

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class],[ViewController class], nil] setTintColor:[UIColor redColor]]; 

establecer el color de tinte rojo para UIBarButtonItems que se encuentran en cualquier UIToolBar que están en la clase ViewController.

Así que para establecer el aspecto de UINavigationBar y UIToolBar separado que necesitará 2 llamadas separadas al método +appearanceWhenContainedIn:

Cuestiones relacionadas