¿Cómo puedo cambiar manualmente entre UIViewControllers en el guión gráfico?

Todo lo que necesito es ver un controlador UIView en el mismo archivo del guión gráfico manualmente con el código. Yo uso storyboard para hacer todas las formas y conexiones. Mi aplicación se inicia en el controlador de navegación, que me proporciona acceso a UIView ( LoginViewController ) y luego al controlador de la barra de tabs, que proporciona 4 UIViews . De acuerdo con cada UIView tengo archivos .h y .m . Sé sobre el método segue, es simple, pero necesito un método manual. Tal vez estoy haciendo algo mal.

Estaba tratando de usar este método para empujar el controlador de vista en IBAction :

 [self.view pushViewController:LoginViewController animated:YES]; 

Pero comete un error:

Nombre de interfaz inesperado ‘LoginViewController’: expresión esperada

Me tomó mucho tiempo descubrir qué es lo que está mal, pero no lo logré. Aquí está mi archivo RollEnemyController.m :

 // RollEnemyController.m #import "RollEnemyController.h" #import "LoginViewController.h" @implementation RollEnemyController; @synthesize AttackButtonPressed; - (IBAction)AttackButtonPressed:(id)sender { LoginViewController* controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; [self.view pushViewController:controller]; } @end 

Y este es el archivo de encabezado:

 // RollEnemyController.h #import  @interface RollEnemyController : UIViewController - (IBAction)RollButtonPressed:(id)sender; @property (weak, nonatomic) IBOutlet UIButton *AttackButtonPressed; @end 

Supongo que estás usando un UINavigationController . Entonces simplemente puedes hacer esto:

 LoginViewController *controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; [self.navigationController pushViewController:controller animated:YES]; 

Actualizar:

Si está utilizando un UIStoryboard , puede establecer el identificador de su nuevo viewcontroller, y luego presionarlo en su navigationController. Para establecer el identificador, elija su vista, abra el Inspector de Atributos y configure el identificador (“LoginIdentifier” en mi ejemplo). Entonces puedes hacer esto:

 LoginViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginIdentifier"]; [self.navigationController pushViewController:controller animated:YES]; 

Como nota al margen, veo que estás usando caracteres de mayúsculas para tus métodos. Probablemente deberías tratar de evitar eso, y en su lugar usar los primeros caracteres rebajados en los nombres de tus métodos. Y como dices que estás aprendiendo Objective-C, deberías echar un vistazo a este increíble hilo aquí en SO: link .

Actualización 2:

Aquí hay un archivo zip con un proyecto que muestra cómo hacerlo. 🙂

Hola, intente utilizar este código

Storyboard puso ID = “xxx * Name Desire” marca uso StoryboarID

 UIStoryboard * storyboard = self.storyboard; DetailViewController * detail = [storyboard instantiateViewControllerWithIdentifier: @ "xxx * Name Desire"]; [self.navigationController pushViewController: detail animated: YES]; 

En esta statement:

 [self.view pushViewController:LoginViewController animated:YES]; 

parece que estás tratando de impulsar una clase . Deberías empujar un objeto, tu controlador real:

 LoginViewController* controller = [[LoginViewController alloc] init...]; [self.view pushViewController:controller animated:YES]; 

esto al menos comstackrá, y si todo lo demás está bien, también te dará el segundo controlador.

EDITAR:

Perdí un punto. Está presionando el controlador de vista en una vista. Eso no tiene sentido, debe presionar el controlador en el controlador de navegación:

  *del = (AppDelegate*)[UIApplication sharedApplication].delegate; [del.navigationController pushViewController:controller animated:YES]; 

Esto es cierto, al menos, si creó su proyecto a partir de la plantilla basada en navegación (que crea un delegado de aplicación con una referencia al controlador de navegación). De lo contrario, proporcione detalles sobre cómo crear el controlador de navegación.

Mencionaste en un comentario que estás usando UIStoryboard . ¿ UIStoryboardSegue ? Todo lo que tiene que hacer es controlar y arrastrar desde el botón hasta el siguiente controlador de vista para establecer un segue. Entonces puedes elegir el tipo de transición. Tenga en cuenta que sus controladores de vista deben ser parte de un UINavigationController en el guión gráfico para realizar una animación “Push”.