example bar ios swift uistoryboardsegue

ios - bar - root view controller navigation controller



''Show'' segue en Xcode 6 presenta el controlador de visualizaciĆ³n como modal en iOS 7 (11)

Esta solución es diferente de las demás en las siguientes formas:

  1. Incluye un método para examinar y verificar el problema.
  2. La causa del problema se remonta a la fuente (un cambio en el tipo segue)
  3. La solución es muy simple (borrar y recrear un nuevo segmento)
  4. Por favor, tenga en cuenta los requisitos en el texto.

Acabo de dar una respuesta SO muy detallada que explica por completo lo que está sucediendo y por qué, pero la solución simple es que puede eliminar el Segue que no está presionando y luego recrearlo en el guión gráfico. La razón es que es probable que haya un bit de xml roto en el segmento (vea la respuesta extendida para ver ejemplos / instrucciones sobre cómo confirmar este problema).

Después de confirmar que tiene al menos un UINavigationController dentro de la jerarquía de vistas, asegúrese de que el segmento NO sea un segmento manual y NO tenga una acción asociada (mirando el segmento en el guión gráfico como Código fuente). Elimine el segmento existente y luego presione Ctrl y arrastre desde un UIView / UIControl al controlador de vista de destino y, si es necesaria una acción personalizada, intercepte la llamada al controlador de destino en prepareForSegue .

También para confirmar que esta solución funciona para usted, haga lo siguiente:

  • Verifique que su controlador de vista inicial (con la flecha en él) sea un UINavigationController y que tenga un controlador de vista de contenido normal como su controlador de vista raíz. (o que incruste su controlador de vista inicial dentro de un UINavigationController)
  • Lea mis comentarios extendidos sobre una respuesta anterior a una pregunta muy similar (enlace arriba).

Tengo dos controladores de vista en mi aplicación de iPhone (construida con swift) construidos con Xcode 6.1 y utiliza guiones gráficos.

El primer controlador de vista está integrado en un controlador de navegación en el guión gráfico y el segmento para el segundo controlador de vista es un segmento de ''Mostrar''.

Cuando se ejecuta la aplicación, muestra correctamente la transición como un empuje en iOS 8.x, pero en iOS 7.x aparece como un modal sin la barra de navegación.

El requisito de mi aplicación es mostrar la transición como una inserción independientemente de si es iOS 7 o iOS 8. ¿Alguna idea para que esto funcione como una inserción en ambas versiones de iOS?

Vi una publicación relacionada en la que se menciona este problema, pero no pude encontrar una solución al problema: Adaptive segue en el guión gráfico Xcode 6. ¿Está obsoleto el push?

Cualquier ayuda es apreciada ...

Gracias


Básicamente la respuesta de Jomafer es en parte correcta. El controlador que está presionando debe ir precedido por un UINavigationController. Realmente no es necesario presionar el controlador UINavigation. Mientras el storyboard sepa que está dentro de un controlador UINavigation, todo está bien.


Creo que esto es un error en Xcode 7.2. Para solucionar el problema, puede crear un segmento "Push (en desuso)" y, a continuación, en el editor del Guión gráfico, seleccionar el segmento y cambiarlo a Mostrar (por ejemplo, Push).


Cuando un segmento "Mostrar" aparece como un modo modal en las pruebas, generalmente es uno de dos problemas:

  1. El primer controlador de vista no está dentro de un controlador de navegación.

  2. El storyboard XML está dañado.

La solución al # 2 generalmente es eliminar y reemplazar el segmento, y debe corregirse. A veces, simplemente cambiando a otro estilo de presentación, ejecutando, y volviendo a "Mostrar" se corrige.

Esto también puede suceder a "Mostrar detalle" segues, y puede ser más insidioso.

Ejemplo: Tengo una serie de controladores de vista organizados en un UISplitViewController. Tienen segues Show-> Show-> Show-> Show Detail. La última sesión siguió apareciendo modal. Intenté todo para arreglar ese último segue. El problema era que el segmento de show anterior se había corrompido en un segmento de detalle de show (a pesar de que el guión gráfico todavía decía que era un segmento de show). Había estado probando en el iPhone y no descubrí el problema real hasta que lo ejecuté en el simulador de iPad. Los segmentos ahora eran Mostrar-> Mostrar-> Mostrar detalles -> Mostrar detalles. En el iPhone, el tercer segmento se parecía a un Show porque se colapsó en el controlador de navegación. Sin embargo, sigue siendo el controlador de vista detallada , y no puede tener un Detalle de Mostrar desde un controlador de vista detallada, por lo que el sistema operativo hace lo que puede para obtener su controlador de vista en la pantalla y lo muestra de manera modal.

Lección 1: Siempre pruebe su UISplitViewController en iPad para asegurarse de que los segmentos están haciendo lo que piensa.

Lección 2: Si su segue se aproxima de manera inesperada, verifique los segures en sentido ascendente en busca de corrupción, así como el segue en cuestión.


El problema en mi caso fue que creé Show (por ejemplo, Push) segue antes de colocar ViewController como rootViewController de UINavigationController. En otras palabras, no tenía UINavigationController. Luego eliminé la secuela, agregué UINavigationController y agregué nuevamente la secuela y funcionó. Probado en Xcode 9.0.1 / iOS 11.0.3.


Es posible que haya asignado el Controlador de Vista Inicial a su UIViewController en lugar del UINavigationController. Además, seleccione su UIViewController y verifique que la opción "Es controlador de vista inicial" no esté marcada.


Estoy usando XCode 9 con Swift 4. Tenga en cuenta que esta versión salió ayer (20 de septiembre).

Para mí esto fue solo un error de caché. Tuve que elegir "Presentar Modalmente", ejecutar la aplicación y luego elegir "Mostrar (por ejemplo, Push)". Ahora todo funciona bien.


He tenido este problema exacto con "Mostrar (p. Ej., Push)" durante años y lo he descubierto mientras intentaba insertar un controlador de vista en un controlador de navegación que se encuentra en un Popover. Parece que el contexto del llamado View Controller es el problema. Así es como lo resolví:

  1. En el Controlador de vista que realiza el Segue, marque la propiedad "Definir contexto" en el Guión gráfico.
  2. En el Controlador de vista llamado, establezca la propiedad Presentación en "Contexto actual".

Me encontré con este problema y la única solución que encontré que funciona para mí es usar el segmento ''Push'' en desuso.


Para mí, mi guión gráfico carecía de un controlador de navegación. Estoy creando el controlador de navegación programáticamente, que funciona bien en iOS8, pero no en iOS7.

SOLUCIÓN

  1. En su guión gráfico, seleccione el controlador de vista principal y en el menú Xcode, elija Editor> Incrustar en> Controlador de navegación .
  2. Seleccione el nuevo controlador de navegación y, en el inspector de atributos a la derecha, debajo de Ver controlador , asegúrese de que la casilla Ver control inicial esté marcada.
  3. Ejecutar la aplicación. Debería ser arreglado ahora.

Aquí está la solución para eso. Parece un error en Xcode para iOS 7. Necesita crear un UINavigationController ficticio y vincular todos sus UIViewControllers gratuitos a este controlador de navegación. Trabajó para mi.