El constructor de interfaz Xcode 6 por defecto tiene una nueva casilla de verificación "usar clases de tamaño". Hace que las vistas sean adaptativas.
Cuando intento hacer una transición entre 2 vistas en mi guión gráfico, tengo nuevas opciones:
en vez viejo:
Ahora tenemos "show" y "present modally" en lugar de "push" y "modal". Las opciones anteriores están marcadas como obsoletas. Elegí la opción "mostrar", porque en la configuración segue se llamaba "mostrar (por ejemplo, presionar)
Pero no hace empuje. La animación Segue parece una diapositiva desde la parte inferior (modal) y la barra de navegación desaparece.
La pregunta es: ¿Cómo puedo hacer que "show" funcione como push? ¿Es posible o debería usar "push (obsoleto)" en su lugar? ¿Dónde puedo encontrar información sobre nuevos tipos de segue? Lo único que he encontrado en la biblioteca para desarrolladores de iOS8 es Storyboards Help You Design Your User Interface pero no hay información sobre el "show" segue.
ACTUALIZAR
Traté de crear un nuevo proyecto y "show" realmente funciona como "push". Creo que el problema en mi proyecto puede ser porque reutilizo el controlador de navegación con un código como este, pero no sé cómo solucionarlo.
if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) {
SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
[navController setViewControllers: @[dvc] animated: NO ];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
};
}
Después de eso trato de empujar NewViewController después de MainViewController
ACTUALIZACIÓN 2:
Parece ser solo un problema de iOS 7, iOS 7.1.
fuente
Ya hay una respuesta aceptada, pero quería dar un poco más de información, posiblemente información que antes no estaba disponible.
Como se mencionó anteriormente, los segmentos "push" y "modal" quedaron en desuso y han sido reemplazados por "show" y "present modally" respectivamente. Según la documentación de Apple, los nuevos segmentos se han dividido en segmentos que se adaptan a las clases de tamaño. Los más antiguos solo deben usarse para admitir versiones de iOS anteriores a iOS 8.
El documento en el siguiente enlace explica eso y la descripción de todos los segmentos disponibles, antiguos y nuevos.
Agregar una secuencia entre escenas en un guión gráfico
En caso de que la URL cambie en el futuro, esta es la explicación dada para cada nuevo segmento:
fuente
No hay nada malo con las otras respuestas, pero esta explica lo que está sucediendo, cómo puede verificar que está sucediendo y cómo mitigar el problema en el futuro.
Antecedentes
En mi caso, ninguno de mis Show Segues funcionaba a pesar de que ya tenía un UINavigationController como mi controlador de vista inicial (con mi contenido UIViewController como root).
Por qué y cómo se rompe el espectáculo Segue
Show segue se rompe cuando tiene una acción asociada con el segue dentro del xml fuente del guión gráfico. Un escenario típico que causa esto podría ser si ha redefinido una secuencia de una secuencia manual previamente llamada en código. Esto deja los siguientes bits en el storyboard xml.
Para acomodar cualquier acción personalizada cuando se usa el segue del guión gráfico, uno puede acceder a prepareForSegue e interceptar el controlador de vista de destino y llamar a cualquier método desde esa ubicación. En cualquier caso, el efecto secundario de este pequeño error (el error es el hecho de que cuando redefine el segue no se configura correctamente en xml ~ es decir, la acción permanece incluso después de cambiar el segue a uno que opera desde una UIView (o UIControl) a un controlador de vista de destino).
Lamentablemente, la solución más directa falla. Entonces, solo eliminar el atributo xml para la acción desde Storyboard NO solucionará el problema. En cambio, uno simplemente tiene que eliminar y recrear la secuencia en el guión gráfico.
Cuando se vuelve a crear el storyboard xml ya no tendrá una acción asociada con el segmento particular y el Show se ejecutará como un Push.
Xml de muestra para Show Segue correcto
Mitigación
Para evitar la recurrencia, uno solo debe apegarse a la segmentación de guiones gráficos no manuales, si es posible, utilizando prepareForSegue para agregar las acciones requeridas basadas en el controlador de vista de destino. O si tiene que mezclar y combinar, tome la precaución de verificar que su segue Show no tenga ninguna acción adjunta en el storyboard xml. Si se trata de proyectos más antiguos, debe prestar especial atención al código fuente de Storyboard, ya que descubrí algunos problemas.
fuente
Como Scott Robertson comentó aquí , esto parece un error en iOS 7.
Parece que en iOS 8 la transición se infiere en tiempo de ejecución (comportamiento correcto), mientras que en iOS 7 la transición se infiere en tiempo de diseño (comportamiento con errores).
La solución más simple es agregar un controlador de navegación no utilizado al guión gráfico y vincularlo para que el controlador de vista en cuestión sea parte de este controlador de navegación. En realidad, no tiene que crear una instancia del controlador de navegación, solo necesita el controlador de vista con errores para saber que está incrustado en un controlador de navegación.
Nota: Simular una barra de navegación no es suficiente para estos fines; en realidad debe tener un controlador de navegación en su pila de inserción.
Para reproducir el error:
initWithRootViewController:
método.Para arreglar el error:
workaround for show segues in iOS 7
)Observe cómo se agregó el controlador de navegación en la segunda imagen y cómo no tiene flechas entrantes (es decir, no hay forma de crear una instancia que no sea usando su identificador de controlador de vista).
fuente
Sé que llego tarde a esto, pero quería compartir lo que aprendí. De hecho, esto es un error y todavía está presente hoy (18/12/2014).
Escribí un artículo sobre esto aquí .
Es fácilmente reproducible; en iOS8 funcionará bien e incluso en iOS7.x siempre que no inserte un controlador de vista mediante programación en la pila antes de llamar al
Show
segue.Si solo empujas a la pila usando las conexiones del guión gráfico, funcionará; pero aparentemente si empuja a través del código de alguna manera, la
navigationController
propiedad del empujadoUIViewController
seránil
y cuando lo llameShow
asumirá que es modal porque no hay navegación para controlar la pila.La única solución hasta el momento es no presionar a través del código (no es factible) o usar el ahora obsoleto
Push
.Archivé un radar (enlace en el artículo). Siéntase libre de presentar duplicados con la esperanza de que Apple solucione este problema.
fuente
Show
segue, luego en el segundoShow
segue se presenta modalmente, ¿Solución?Show
Sucede cuando se intenta realizar un (segundo) de un viewController en iOS 7Tuve el mismo problema con segues en Xcode 7 e iOS 7.1.2. Show segues (nueva característica de iOS 8) funciona como segues modales en iOS 7 y no le permite empujar sus controladores de vista a la pila del controlador de navegación cuando define el tipo de segue con Xcode en su Storyboard. Es por eso que su self.navigationController devolverá nulo, porque el Controlador de vista no fue empujado a la pila y no puede abrirlo.
No entiendo por qué Apple no agregó ninguna notificación para este caso en Xcode cuando necesita que su aplicación funcione en iOS 7. Dicen que el método Push está en desuso, pero Show no funciona correctamente con iOS 7.
¿Qué hice para resolver el problema?
He creado la clase MYShowSegue con .h
Y el archivo .m con un solo método de ejecución :
De lo que necesita establecer un tipo personalizado para cada segmento en su Storyboard y seleccionar una nueva clase para él, en mi caso fue MYShowSegue.
Ejemplo de Segue personalizado
Esta solución lo ayudará a obtener un soporte completo de sus aplicaciones iOS 7, usarán el método pushViewController para impulsar sus Vistas y para iOS 8,9, etc. su segue funcionará con el nuevo método (iOS 8) showViewController
No olvides hacer lo mismo con todos tus segmentos en tu Storyboard.
fuente
Esto sigue sucediendo en iOS 10.x
Eliminar y volver a instalar segues no me resolvió nada:
Problema: la funcionalidad requerida era de 7 segues, que solo funcionan como un "push" (en realidad, un show Detail) pero, de hecho, solo el primer segue que agregué empujaría, los demás se comportarían modalmente. Esto a pesar de que Interface Builder describe cada uno de los segmentos de forma idéntica.
Solución: tuve que agregar la acción a los 6 segmentos que no la tenían.
Storyboard original XML
Cambié esto agregando showViewController: remitente
fuente