Comment puis-je basculer manuellement entre les UIViewControllers dans le storyboard?

Tout ce dont j'ai besoin est de voir un controller UIView dans le même file de storyboard manuellement avec du code. J'utilise le storyboard pour faire toutes les forms et les connections. Mon application démarre dans le controller de navigation, ce qui me donne access à UIView ( LoginViewController ), puis au controller de la barre d'tabs, qui fournit 4 UIViews . Selon chaque UIView j'ai des files .h et .m . Je connais la méthode de segue, c'est simple, mais j'ai besoin d'une méthode manuelle. Peut-être que je fais quelque chose de mal.

J'essayais d'utiliser cette méthode pour pousser le controller de vue dans IBAction :

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

Mais cela fait une erreur:

Nom d'interface inattendu 'LoginViewController': expression attendue

Il a fallu beaucoup de time pour comprendre ce qui ne va pas, mais je n'ai pas réussi. Voici mon 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 

Et ceci est un file d'en-tête:

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

Je suppose que vous utilisez un UINavigationController . Alors vous pouvez simplement faire comme ceci:

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

Mettre à jour:

Si vous utilisez un UIStoryboard , vous pouvez définir l'identifiant de votre nouveau viewcontroller, puis le placer sur votre navigationController. Pour définir l'identifiant, choisissez votre vue, ouvrez l'inspecteur d'attributes et définissez l'identifiant ("LoginIdentifier" dans mon exemple). Alors vous pouvez faire ceci:

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

En tant que sidenote, je vois que vous utilisez des caractères majuscules pour vos methods. Vous devriez probablement essayer d'éviter cela, et utiliser à la place des caractères premiers abaissés dans les noms de vos methods. Et puisque vous dites que vous apprenez Objective-C, vous devriez jeter un coup d'œil à ce fil formidable ici sur SO: link .

Mise à jour 2:

Voici un file zip avec un projet montrant comment faire cela. 🙂

bonjour essayez d'utiliser ce code

Storyboard mis ID = "xxx * Nom Désir" marque utiliser StoryboarID

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

Dans cette déclaration:

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

il semble que vous essayez de pousser une class . Vous devriez pousser un object, votre controller actuel:

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

cela comstackra au less, et si tout le rest va bien, aussi vous donner le deuxième controller.

MODIFIER:

J'ai raté un point. Vous poussez le controller de vue sur une vue. Cela n'a aucun sens, vous devriez pousser le controller sur le controller de navigation:

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

Cela est vrai, au less, si vous avez créé votre projet à partir du model basé sur la navigation (qui crée un délégué d'application avec une reference au controller de navigation). Sinon, veuillez fournir des détails sur la création du controller de navigation.

Vous avez mentionné dans un commentaire que vous utilisez UIStoryboard . UIStoryboardSegue -vous UIStoryboardSegue ? Tout ce que vous avez à faire est de faire glisser la command du button au controller de vue suivant pour établir une séquence. Ensuite, vous pouvez choisir le type de transition. Sachez que vos controllers de vue doivent faire partie d'un UINavigationController dans le storyboard pour effectuer une animation "Push".