¿Cómo puedo cambiar manualmente entre UIViewControllers en storyboard?

Todo lo que necesito es ver un controller UIView en el mismo file de storyboard manualmente con código. Utilizo storyboard para hacer todas las forms y conexiones. Mi aplicación se inicia en el controller de navigation, que me proporciona acceso a UIView ( LoginViewController ) y luego pasa al controller de barra de tabs, que proporciona 4 UIViews . De acuerdo con cada UIView tengo files .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 controller de vista en IBAction :

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

Pero hace un error:

Nombre de interfaz inesperado 'LoginViewController': expresión esperada

Me tomó mucho time descubrir qué es lo que estaba mal, pero no había tenido éxito. Aquí está mi file 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 file de encabezado:

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

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

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

Actualizar:

Si está utilizando un UIStoryboard , puede configurar el identificador de su nuevo control de visualización y luego presionarlo en su control de navigation. Para configurar el identificador, elija su vista, abra el Inspector de attributes 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 un sidenote, veo que está utilizando caracteres de mayúscula para sus methods. Probablemente deberías tratar de evitar eso, y en su lugar usa los primeros caracteres rebajados en los nombres de tus methods. Y dado que dices que estás aprendiendo Objective-C, deberías echar un vistazo a este increíble tema aquí en SO: link .

Actualización 2:

Aquí hay un file zip con un proyecto que muestra cómo hacerlo. Todos los derechos reservados

hola intenta usar este código

Storyboard put ID = "xxx * Name Desire" mark usa 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 intentando impulsar una class . Debe presionar un object, su controller real:

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

al less esto comstackrá, y si todo lo demás está bien, también le dará el segundo controller.

EDITAR:

Me perdí un punto. Está presionando el controller de vista a una vista. Eso no tiene sentido, debe presionar el controller en el controller de navigation:

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

Esto es cierto, al less, si creó su proyecto desde la plantilla basada en navigation (que crea un delegado de la aplicación con una reference al controller de navigation). De lo contrario, proporcione detalles sobre cómo crear el controller de navigation.

Mencionaste en un comentario que estás usando UIStoryboard . ¿Estás al tanto de UIStoryboardSegue ? Todo lo que tiene que hacer es controlar: arrastre desde el button al siguiente controller de vista para establecer una segue. Entonces puede elegir el tipo de transición. Tenga en count que los controlleres de vista deben formar parte de un UINavigationController en el guión gráfico para realizar una animation "Push".