iOS: impide que la configuration de visualización de UIA cambie la vista de accesorios de input de UIWebView

Tengo un UIWebView en mi aplicación y el problema es que tengo una apariencia UIA que modifica la apariencia de los controles segmentados, por lo que modifica el control segmentado en la vista de accesorios de input para campos de text UIWebView, me gustaría que se viera correctamente, o para no intentar modificarlo. Así es como se ve actualmente:

introduzca la descripción de la imagen aquí

Acabo de resolver este problema por mí mismo al usar [Apariencia de UIAppariencia cuando ContainedIn:] en lugar de [Apariencia de Apariencia UIA].

Úselo enviando al selector una list terminada en cero de todas sus classs personalizadas de ViewController que contienen los elementos que desea personalizar. Entonces, en lugar de

[[UISegmentedControl appearance] setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

utilizar

 [[UISegmentedControl appearanceWhenContainedIn:[MyViewController class], [MyOtherViewController class], nil] setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

No necesita listr todos los ViewControllers, solo los de nivel superior. Esto también hace posible el siguiente truco: Crear una subclass 'vacía' CustomizedViewController de UIViewController que no hace otra cosa que ser una subclass y luego una subclass a partir de ahí a través de su código en lugar de UIViewController (básicamente replace todas las ocurrencias de 'UIViewController' con 'CustomizedViewController' – excepto donde CustomizedViewController realmente declaró UIViewController como su superclass.

Luego use

 [[UISegmentedControl appearanceWhenContainedIn:[CustomizedViewController class], nil] setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Ok, así que finalmente pude encontrar una solución para esto. Mira mi comentario sobre la respuesta actual que explica por qué esa respuesta no funciona para mí.

Para volver a iterar, por lo que puedo decir que el código iOS que está creando el accesorio del keyboard está configurando explícitamente el background UIToolbar, por lo que no obtendrá su configuration de background UIAppearance, pero obtendrá su estilo UIBarButtonItem. El resultado es una vista a medio estilo, que puede verse bastante mal. Afortunadamente, mi diseñador estaba bien para volver a recurrir al estilo pnetworkingeterminado para este caso en particular.

Por lo tanto, el truco consistía realmente en descubrir cómo hacer que esa vista NO se diseñe a través de UIAppearance. La forma en que hice esto fue para replace esto:

 id barButtonAppearanceProxy = [UIBarButtonItem appearance]; 

Con este:

 // wtf: Style any UIBarButtonItem associated with a UIViewController id barButtonAppearanceProxy = [UIBarButtonItem appearanceWhenContainedIn:[UIViewController class], nil]; 

Esto me pareció raro al principio porque estaba pensando en la contención en términos de una vista: heirarchy … Pero, esto es solo decir que solo diseñaremos UIBarButtonItems que están asociados con UIViewController's. La razón por la que esto no afecta al accesorio del keyboard se debe a que se agrega directamente la window de la vista principal y no está asociada con un UIViewController.

Esto todavía no es una solución perfecta, ya que idealmente solo diseñaríamos el accesorio de keyboard con UIAppearance. Además, supone que todas las barras de herramientas están asociadas con UIViewControllers. Afortunadamente para mí (y probablemente la mayoría de ustedes), este es el caso en general.

    Intereting Posts