Navegue a otro ViewController mediante progtwigción utilizando Custom Segue

Tengo dos controlleres de vista en el guión gráfico. Navegué exitosamente desde la primera a la segunda programáticamente:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; YourViewController *yourViewController = (YourViewController *)[storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"]; [self.navigationController pushViewController:yourViewController animated:YES]; 

Quiero usar mi Segue custom para navegar a otra página en lugar de pushViewController sin usar el pushViewController interfaces.

Esta es mi Segue personalizada que podría usar fácilmente con el creador de interfaces:

 @interface LeftToRightSegue : UIStoryboardSegue 

¿Qué hay de hacerlo programáticamente?

Así es como lo he hecho. Creo mi subclass Segue luego lo llamo desde mi sourceViewController IE en el que estoy, inicie mi myConViewer de destino y luego los pase a mi class segue personalizada.

 YourViewController *yourViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"YOURStoryboardViewControllerID"]; CustomSegueClass *segue = [[CustomSegueClass alloc] initWithIdentifier:@"ANYid" source:self destination:yourViewController]; [segue perform ]; 

Creo que debes utilizar el generador de interfaces para informar al guión gráfico que debe existir una segue de un tipo particular entre dos elementos y cómo identificarlo. Puede activarlo en el código mediante performSegueWithIdentifier: pero, de acuerdo con los documentos, no puede crear uno en el código:

"Su aplicación nunca crea objects segue directamente, siempre se crean en su nombre por iOS cuando se activa una segue".

Como escribió Phillip Mills, tienes que crear una segue en IB. Puede hacerlo controlando y arrastrando de un controller de visualización a otro y seleccionando "Personalizado" del menu que aparece. A continuación, select el nuevo segue y el inspector de attributes abiertos. Ingrese un identificador para la segue y configure su class con el nombre de la class que ha implementado. Después de completar estos pasos puede usar performSegueWithIdentifier:

Asumo que estás preguntando cómo debes implementar la subclass segue personalizada para que no tengas que usar el controller de navigation.

En caso afirmativo, anularía el método perform en su class LeftToRightSegue la siguiente manera:

 - (void)perform { UIViewController *source = self.sourceViewController; UIViewController *destination = self.destinationViewController; UIWindow *window = source.view.window; CATransition *transition = [CATransition animation]; [transition setDuration:1.0]; [transition setTimingFunction:[CAMediaTimingFunction functionWithName:UIViewAnimationOptionCurveEaseInOut]]; [transition setType:kCATransitionPush]; [transition setSubtype:kCATransitionFromRight]; [transition setFillMode:kCAFillModeForwards]; [transition setRemovedOnCompletion:YES]; [window.layer addAnimation:transition forKey:kCATransition]; [window setRootViewController:self.destination]; } 

Puede cambiar el tipo de animation si desea algo diferente a un impulso. Además, no olvide importar QuartzCore:

 #import <QuartzCore/QuartzCore.h> 

De manera rápida, click Segue y select Personalizado. Ahora puede crear una subclass de UIStoryboardSegue de la siguiente manera

class MySegue: UIStoryboardSegue { override func perform() { let source = sourceViewController as! UIViewController if let navigation = source.navigationController { navigation.pushViewController(destinationViewController as! UIViewController, animated: false) } } }

luego select Segue y establezca Clase y module correctamente. Espero eso ayude