Advertencia "Estilo sencillo no admitido en un elemento de navegación" con mi elemento de botón de barra personalizado

88

Arrastro un botón de rectángulo redondo a la posición del elemento del botón de barra derecho y establezco una imagen en el botón de rectángulo redondo. Todo funciona bien, excepto la advertencia "Estilo simple no admitido en un elemento de navegación". Incluso si selecciono el estilo del elemento del botón de la barra en "Bordeado", la advertencia seguirá estando allí. ¿Qué pasa con Xcode 4.2? ¡Gracias por adelantado!

PD. Personalicé muchos elementos del botón de barra con el botón de rectángulo redondo, algunas veces Xcode 4.2 muestra solo una advertencia en un elemento del botón de barra, algunas veces muestra advertencias en todos los elementos del botón de barra.

lu yuan
fuente
1
Escribí una publicación de blog sobre esto: blog.mosheberman.com/…
Moshe
No agregue botones, agregue elementos de botón de barra. Este fue mi error.
Daniel Springer

Respuestas:

135

Pude eliminar estos errores editando manualmente los archivos del guión gráfico y encontré la entrada ofensiva style = "simple" en los <navigationItem>elementos del botón de barra en el elemento.

Cambiaron desde:

<barButtonItem key="rightBarButtonItem" style="plain" id="juB-DL-F9i">

A:

<barButtonItem key="rightBarButtonItem" id="juB-DL-F9i">

Esto borró las advertencias ... correctas o incorrectas.

Este puede ser un truco estupendo y la mayor preocupación es que no lo causé ni eliminé los elementos del botón de la barra invisible del documento general. Esto fue después de revisar todos los elementos uno por uno y descubrir que algunas barras de navegación estaban vacías (sin hijos) y probablemente ocurrió con la gran cantidad de herencia de copiar y pegar (cmd + c | v) y no usar duplicado (cmd + d) para construir la interfaz. Aunque la causa de origen no fue la raíz, el síntoma fue que los elementos de la barra no se mostraban en la "vista de esquema" del documento para corregirlos. El comportamiento de Interface Builder me parece a veces matizado y un contenedor vacío donde debería haber algo en una vista de esquema es un olor. Bueno, lo es para mí ahora. A veces, eliminar el nodo infractor y reconstruir soluciona los problemas más extraños.

ADVERTENCIA: haga una copia de seguridad de sus guiones gráficos antes de probar esto ... el control de versiones es su amigo ... No asumo ninguna responsabilidad cuando su guión gráfico está completamente regado y no se compila. Todo lo que obtendrás es un "¡Te lo dije!" Aprendí de la manera difícil algunas veces, pero el control de fuentes diligente me ahorró un dolor de cabeza.

EDITAR: poner corchetes en bloques de código

Cazador-Orionnoir
fuente
24
seleccione el elemento barbutton en el generador de interfaces, abra el panel de atributos a la derecha y, al cambiar el estilo del elemento del botón de la barra a "Bordered", se aplicó la misma diferencia al archivo del guión gráfico. así que esto debería ser seguro.
mash
Gracias por ese consejo @mash, la forma en que lo hice fue horriblemente forjado con dolor y sufrimiento potenciales.
Hunter-Orionnoir
@ SpaceDog2 Gracias por el aviso. No me he actualizado todavía, por lo que no puedo agregar ninguna confirmación a eso. De todos modos, tendría mucho cuidado con este método. Sé que ha ayudado a mucha gente hasta ahora. Con el tiempo veremos si deja de ayudar.
Hunter-Orionnoir
5
Esta solución funcionó perfectamente para mí en Xcode 7.1. Además, en lugar de editar directamente el código fuente, puede cambiar esto en el propio guión gráfico (cambiando el estilo de Sencillo a Bordeado), y eso tiene exactamente el mismo resultado que eliminarlo manualmente style="plain"del código fuente del guión gráfico. Entonces, para mí, esta sugerencia de Hunter parece legítima.
Erik van der Neut
Mira la respuesta de dstudeba también, ni siquiera sabía que lo que él describió era posible. podría ahorrarles a todos algo de dolor y sufrimiento al editar manualmente el archivo. El control de la fuente son sus amigos, estén seguros todos. ;)
Hunter-Orionnoir
31

En caso de que haga clic en la advertencia y no vaya al elemento de navegación infractor, haga lo siguiente. (representación visual de la respuesta de Hunter con un método más seguro de los comentarios agregados)

En el explorador de archivos, haga clic derecho en el guión gráfico y seleccione Open As Source Code

ingrese la descripción de la imagen aquí

En la página de código fuente, busque "simple" y busque el adjunto a un elemento de navegación.

ingrese la descripción de la imagen aquí

Para obtener el nombre de la vista, coloque "escena" en la barra de búsqueda y haga clic en la flecha de búsqueda hacia atrás para buscar la primera instancia en esa etiqueta encima de lanavigationItem

ingrese la descripción de la imagen aquí

Aquí está el nombre de su escena, ahora puede cambiar su vista de Storyboard nuevamente Interface Builder - Storyboardcon el método de clic derecho descrito anteriormente, y luego ir a seleccionar la escena en el menú de escena y el elemento de barra dentro de ella.

ingrese la descripción de la imagen aquí

Vaya al inspector de atributos y cambie el estilo de PlainaBordered

ingrese la descripción de la imagen aquí

dstudeba
fuente
1
Frio. Definitivamente intentaré esto la próxima vez que ocurra.
Hunter-Orionnoir
13

Detuve la advertencia sobre el estilo sencillo hurgando en el esquema del documento. Eso mostraba mi elemento de navegación, y dentro de esos 2 elementos de botón de barra, y dentro de cada uno de ellos un botón. La configuración infractora estaba en el elemento del botón de barra. En su inspector de atributos cambié Estilo de Sencillo a Hecho y la advertencia desapareció. Nota: estoy usando XCode 5.

MarkAurelius
fuente
8

Si está utilizando un guión gráfico, haga clic en la advertencia y debería llevarlo al elemento de navegación ofensivo (tenía dos para el problema, uno me llevó allí y el otro no): cambie el estilo y limpie el proyecto.

Estilo de botón de barra establecido en simple

Acero reciclado
fuente
En este problema anterior, en realidad no me llevó a ninguna parte. Creo que ese es el punto de fricción de este problema en particular, el elemento faltaba en el navegador por completo, pero la respuesta de dstudeba tiene un enfoque interesante, tenga curiosidad si abrir el guión gráfico de manera diferente ayuda a las personas.
Hunter-Orionnoir
Ésta es la respuesta más adecuada. He cambiado el estilo a Bordered.
Andrej
6

backBarButtonItem leftBarButtonItemy rightBarButtonItemson UINavigationItemobjetos. No hay ninguna stylepropiedad, por UINavigationItemlo que esta es la razón de la advertencia. Debería configurar los barButtons programáticamente:

iOS 4:  

UIButton *bt=[UIButton buttonWithType:UIButtonTypeRoundedRect];
 [bt setFrame:YourFrame];
 //[bt setImage:[UIImage imageNamed:@"backBT"] forState:UIControlStateNormal];
 [bt addTarget:self action:@selector(popViewController:) forControlEvents:UIControlEventTouchUpInside];
 UIBarButtonItem *leftButton=[[UIBarButtonItem alloc] initWithCustomView:bt];
 self.navigationItem.leftBarButtonItem=leftButton;

Para iOS 5+:

Lea la sección "Personalización de la apariencia" de la referencia de UIBarButtonItem .

Estera
fuente
3
Tengo un proyecto heredado con muchos controles y botones de vista. Parece que no puedo convencer a XCode para que me diga qué botón está causando la advertencia. ¿Alguna pista? ¡Gracias!
Olie
Tal vez ejecute sus controladores de vista y "busque" UIBarButtonItenStyle. Eso es generalmente donde la propiedad está configurada incorrectamente
TimWhiting
1

En la barra de navegación, intente usar UIBarButtonItem en lugar del botón Round rect y establezca una imagen para él.

iOSDev
fuente
pero el estilo de UIBarButtonItem no es lo que necesito.
lu yuan
1

En mi caso, fue una imagen de una flecha hacia atrás, que se estableció en "Plain".

El mensaje de error aparece para hacer referencia a todos los elementos de la barra de navegación.

usuario462990
fuente
0

Una vez que esté seguro de que tiene todos los botones de la barra en el guión gráfico configurados en cualquier cosa menos simple, asegúrese de hacer una confirmación de git y eliminar los datos derivados. Pasé una eternidad tratando de averiguar por qué el problema no se estaba solucionando solo, y eliminar la carpeta de datos derivados lo solucionó por mí.

Sethmr
fuente