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
- Comment désélectionner un segment dans le button de contrôle segmenté de façon permanente jusqu'à ce qu'il soit cliqué à nouveau
- Phonegap 3.0 IOS plugins introuvable
- Case à cocher dans l'application iOS
- Objectif C: Comment extraire une partie d'une string (par exemple, commencer par '#')
- Stocker des images dans datatables de base ou en tant que file?
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".