Por definición, un segue realmente no puede existir independientemente de un guión gráfico. Es aún existe en el nombre de la clase: UIStoryboardSegue
. No crea segues mediante programación: es el tiempo de ejecución del guión gráfico lo que los crea para usted. Normalmente puede llamar performSegueWithIdentifier:
al código de su controlador de vista, pero esto se basa en tener un segue ya configurado en el guión gráfico para hacer referencia.
Sin embargo, lo que creo que está preguntando es cómo puede crear un método en su controlador de vista común (clase base) que pasará a un nuevo controlador de vista y será heredado por todas las clases derivadas. Puede hacer esto creando un método como este en su controlador de vista de clase base:
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
y luego en su clase derivada, llame a ese método cuando se haga clic en el botón apropiado o se seleccione la fila de la tabla o lo que sea.
UIViewController
método nombradoperformSegueWithIdentifier:sender:
para esto.UIView
'spresentModalViewController:animated:
está en desuso. De los documentos - (Desaprobado en iOS 6.0. Utilice presentViewController: animado: finalización: en su lugar.)Pensé que agregaría otra posibilidad. Una de las cosas que puede hacer es conectar dos escenas en un guión gráfico utilizando un segue que no está conectado a una acción, y luego desencadenar programáticamente el segue dentro de su controlador de vista. La forma en que hace esto es que tiene que arrastrar desde el icono del propietario del archivo en la parte inferior de la escena del guión gráfico que es la escena de segmentación y arrastrar hacia la escena de destino. Pondré una imagen para ayudar a explicar.
Aparecerá una ventana emergente para "Manual Segue". Elegí Push como el tipo. Toca el pequeño cuadrado y asegúrate de estar en el inspector de atributos. Déle un identificador que usará para referirse a él en el código.
Ok, a continuación voy a seguir usando un elemento de botón de barra programática. En viewDidLoad o en otro lugar, crearé un elemento de botón en la barra de navegación con este código:
Ok, observe que el selector es buttonizeButtonTap :. Entonces escriba un método nulo para ese botón y dentro de ese método llamará al segue de esta manera:
El parámetro del remitente es necesario para identificar el botón cuando se llama a prepareForSegue. prepareForSegue es el método de marco en el que creará una instancia de su escena y le transmitirá los valores que necesite para hacer su trabajo. Así es como se ve mi método:
Ok, solo lo probé y funciona. Espero que te ayude.
fuente
He estado usando este código para crear una instancia de mi subclase de segue personalizada y ejecutarla mediante programación. Parece funcionar. Algo mal con esto? Estoy perplejo, leyendo todas las otras respuestas diciendo que no se puede hacer.
fuente
UIStoryboardSegue
.performSegueWithIdentifier:
esté realmente definida en el guión gráfico. Evito todos los problemas si creo el segue yo mismo.Supongo que esto es respondido y aceptado, pero solo me gustaría agregarle algunos detalles más.
Lo que hice para resolver un problema en el que presentaba una vista de inicio de sesión como primera pantalla y luego quería pasar a la aplicación si el inicio de sesión era correcto. Creé el segmento desde el controlador de vista de inicio de sesión al controlador de vista raíz y le di un identificador como "myidentifier".
Luego, después de verificar todo el código de inicio de sesión, si el inicio de sesión era correcto, llamaría
Mi mayor malentendido fue que intenté poner el segue en un botón e interrumpir el segue una vez que lo encontré.
fuente
Tienes que vincular tu código a la
UIStoryboard
que está utilizando. Asegúrese de ir a YourViewController en suUIStoryboard
, haga clic en el borde que lo rodea y luego configure suidentifier
campo en elNSString
que llame en su código.fuente
Para los controladores que están en el guión gráfico.
jhilgert00 ¿es esto lo que estabas buscando?
O...
fuente
bueno, puedes crear y también puedes subclasificar el UIStoryBoardSegue. La subclase se utiliza principalmente para proporcionar animación de transición personalizada.
Puedes ver el video de wwdc 2011 presentando StoryBoard. También está disponible en YouTube.
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIStoryboardSegue_Class/Reference/Reference.html#//apple_ref/occ/cl/UIStoryboardSegue
fuente
Me gustaría agregar una aclaración ...
Un malentendido común, de hecho uno que tuve durante algún tiempo, es que el
prepareForSegue:sender:
método desencadena una secuencia de guiones gráficos . No lo es. Se realizará un seguimiento del guión gráfico, independientemente de si ha implementado unprepareForSegue:sender:
método para ese controlador de vista (partiendo de).Aprendí esto de las excelentes conferencias de iTunesU de Paul Hegarty . Mis disculpas, pero lamentablemente no puedo recordar qué conferencia.
Si conecta un segmento entre dos controladores de vista en un guión gráfico, pero no implementa un
prepareForSegue:sender:
método, el segue seguirá en el controlador de vista de destino. Sin embargo, pasará a ese controlador de vista sin preparación.Espero que esto ayude.
fuente
Los segmentos del guión gráfico no se deben crear fuera del guión gráfico. Tendrá que cablearlo, a pesar de los inconvenientes.
La referencia de UIStoryboardSegue establece claramente:
Todavía puede decirle programáticamente al guión gráfico que presente un controlador de vista usando un segue usando
presentModalViewController:
opushViewController:animated:
llamadas, pero necesitará una instancia de guión gráfico.Puede llamar
UIStoryboard
al método de clase s para obtener un guión gráfico con un paquete nulo para el paquete principal.storyboardWithName:bundle:
fuente
Primero, suponga que tiene dos vistas diferentes en el guión gráfico y desea navegar de una pantalla a otra, así que siga estos pasos:
1) Defina todas sus vistas con el archivo de clase y también la identificación del guión gráfico en el inspector de identidad.
2) Asegúrese de agregar un controlador de navegación a la primera vista. Selecciónelo en el Guión gráfico y luego Editor> Incrustar en> Controlador de navegación
3) En su primera clase, importe el "secondClass.h"
4) Agregue este comando en la IBAction que debe realizar la segue
5)
@"second"
es la clase de controlador de segunda vista, id del guión gráfico.fuente
self.storyboard
debería ser:UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
storyboardWithName:@"Main"
[self showDetailViewController:next sender:self];
o[self showViewController:next sender:self];
Realicé ingeniería inversa e hice una (re) implementación de código abierto de los segmentos de UIStoryboard: https://github.com/acoomans/Segway
Con esa biblioteca, puede definir segues mediante programación (sin ningún guión gráfico).
Espero que pueda ayudar.
fuente
Un par de problemas, en realidad:
Primero, en ese proyecto que cargó para nosotros, el segue no tiene el identificador "segue1":
sin identificador
Debe completar ese identificador si aún no lo ha hecho.
En segundo lugar, a medida que avanza de la vista de tabla a la vista de tabla, llama a initWithNibName para crear un controlador de vista. Realmente quieres usar instantiateViewControllerWithIdentifier.
fuente
Aquí está el ejemplo de código para
Creating a segue programmatically
:fuente
self.prepare(for: self.commonSegue, sender: self)
desde tu método de acción. Entonces, ¿cuál es el punto de compararif self.commonSegue == segue {...}
en elprepare(for:sender)
método?prepare(for:sender:)
, puede configurar el controlador de vista de destino antes de que se muestre. Por supuesto, también puedes hacerloactionFunction
.