J'ai consulté tous les tutoriels que je peux trouver sur celui-ci et je n'ai toujours pas de réponse. J'ai besoin d'appeler une autre vue du code. J'utilise UIStoryboards
. J'ai changé la vue à plusieurs reprises en faisant glisser UIButtons
tout en maintenant la touche Contrôle enfoncée, mais elle doit maintenant provenir du code. J'essaie d'appeler la page d'information à partir du menu principal si c'est la première fois que l'utilisateur ouvre l'application. Je n'arrive pas à trouver un moyen de changer les vues à partir du code, cependant. Toutes mes vues sont contrôlées par les mêmes fichiers ( ViewController2 ). La identifier
de mon menu principal est ViewControllerMain , et la identifier
de la page d’information est ViewControllerInfo . J'ai d'abord essayé ceci:
[ViewControllerMain presentViewController: ViewControllerInfo
animated:YES
completion: NULL];
Ensuite, j'ai essayé de créer UIViewControllers
différent pour chacun et de dire:
[ViewController2 presentViewController: ViewController
animated:YES
completion: NULL];
Ni travaillé. Pour le premier, il est écrit:
Utilisation de l'identifiant non déclaré ViewControllerMain.
Dans le second, il est écrit:
nom d'interface inattendu 'ViewController': identifiant attendu.
Que puis-je faire?
Pour créer un contrôleur de vue:
UIViewController * vc = [[UIViewController alloc] init];
Pour appeler un contrôleur de vue (doit être appelé depuis un autre contrôleur de vue):
[self presentViewController:vc animated:YES completion:nil];
D'une part, utilisez nil plutôt que null.
Chargement d'un contrôleur de vue à partir du storyboard:
NSString * storyboardName = @"MainStoryboard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_VIEWCONTROLLER"];
[self presentViewController:vc animated:YES completion:nil];
Identifier
de votre contrôleur de vue est égal au nom de classe de votre contrôleur de vue ou à un ID de storyboard que vous pouvez affecter à l'inspecteur d'identité de votre storyboard.
Vous devez instancier le contrôleur de vue à partir du storyboard, puis l'afficher:
ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];
Cet exemple suppose que vous ayez un contrôleur de navigation pour pouvoir revenir à la vue précédente. Vous pouvez bien sûr aussi utiliser presentViewController: animated: complétion :. L'essentiel est que votre storyboard instancie votre contrôleur de vue cible à l'aide de l'ID du contrôleur de vue cible.
Cela obtient un contrôleur de vue du storyboard et le présente.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)
Modifiez le nom du storyboard, le nom de la vue et son identifiant, le cas échéant.
Vous pouvez appeler ViewController de cette façon, si vous le souhaitez avec NavigationController
1.In Current Screen: Charger nouvel écran
VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];
2.1 En vue chargée: ajouter ci-dessous dans le fichier .h
@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>
2.2 En vue chargée: ajouter ci-dessous dans le fichier .m
@implementation VerifyExpViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.delegate = self;
[self setNavigationBar];
}
-(void)setNavigationBar
{
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
self.navigationController.navigationBar.translucent = YES;
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"B_topbar.png"] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Btn_topback.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onBackButtonTap:)];
self.navigationItem.leftBarButtonItem.tintColor = [UIColor lightGrayColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Save.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveButtonTap:)];
self.navigationItem.rightBarButtonItem.tintColor = [UIColor lightGrayColor];
}
-(void)onBackButtonTap:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
-(IBAction)onSaveButtonTap:(id)sender
{
//todo for save button
}
@end
J'espère que cela vous sera utile :)
Vous pouvez le faire de deux manières:
1, Créez un segment avec votre ViewController dans votre Storyboard, comme expliqué dans ma réponse: Comment effectuer un segment sans relation avec la saisie de l'utilisateur dans iOS 5?
2, donnez votre ViewController et votre identifiant et appelez-le en utilisant le code de ma réponse ici: Appelez la scène du storyboard par programmation (sans avoir besoin de séparation)?
la logique principale derrière cet is_,
NSString * storyboardIdentifier = @"SecondStoryBoard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];
UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];
[self presentViewController:UIVC animated:YES completion:nil];
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_iOS7" bundle:nil];
AccountViewController * controller = [storyboard instantiateViewControllerWithIdentifier:@"accountView"];
// [self presentViewController:controller animated:YES completion:nil];
UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topRootViewController.presentedViewController)
{
topRootViewController = topRootViewController.presentedViewController;
}
[topRootViewController presentViewController:controller animated:YES completion:nil];
Importez la classe de contrôleur de vue que vous souhaitez afficher et utilisez le code suivant
KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart animated:YES completion:nil];