Comment appeler un contrôleur de vue par programmation?
j'ai regardé tous les tutos que je peux trouver sur celui-ci, et je n'ai toujours pas la réponse. J'ai besoin d'une autre vue du code. J'utilise UIStoryboards
. J'ai changé la vue de nombreuses fois en faisant glisser le contrôle de UIButtons
, mais maintenant il doit être à partir du code. Je suis en train d'appeler la page d'info dans le menu principal si c'est la première fois que l'utilisateur a ouvert l'application. Toutefois, Je ne vois pas comment modifier les points de vue exprimés dans le code. Tous mes points de vue sont contrôlés par les mêmes fichiers ( ViewController2 ). Le identifier
de mon menu principal est ViewControllerMain , et le identifier
de la page d'information est ViewControllerInfo . J'ai d'abord essayé ceci:
[ViewControllerMain presentViewController: ViewControllerInfo
animated:YES
completion: NULL];
puis j'ai essayé de faire différent UIViewControllers
pour chacun et en disant:
[ViewController2 presentViewController: ViewController
animated:YES
completion: NULL];
Non travaillé. Pour le premier, il est écrit:
Utilisation d'un identificateur non déclaré ViewControllerMain.
dans le second, il est dit:
nom inattendu de l'interface "ViewController": identifiant attendu.
Que puis-je faire?
8 réponses
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 Controller de vue):
[self presentViewController:vc animated:YES completion:nil];
pour un, utilisez zéro plutôt que nul.
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 soit égal au nom de classe de votre contrôleur de vue, soit un Storyboard ID que vous pouvez assigner dans l'inspecteur d'identité de votre storyboard.
vous devez instancier le contrôleur de vue à partir du storyboard et ensuite le montrer:
ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];
Cet exemple suppose que vous avez une manette de navigation pour revenir à la vue précédente. Vous pouvez bien sûr aussi utiliser presentViewController: animated: completion:. Le point principal est que votre storyboard instancie votre contrôleur de vue cible en utilisant L'ID du contrôleur de vue cible.
Swift
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)
Changer le storyboard nom, nom de-vue-contrôleur, et l'affichage de l'id du contrôleur approprié.
vous pouvez appeler ViewController de cette façon, si vous voulez avec NavigationController
1.Dans L'écran courant : charger le nouvel écran
VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];
2.1 Chargé de Vue : ajouter ci-dessous .h fichier
@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>
2.2 en vue chargé : Ajouter ci-dessous en .m fichier
@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 ce sera utile pour quelqu'un :)
il y a 2 façons de le faire:
1, Créer une suite à votre ViewController dans votre Storyboard comme expliqué dans ma réponse ici: comment effectuer une séquence qui n'est pas liée à l'entrée de l'utilisateur dans iOS 5?
2, Donnez votre ViewController et votre identifiant et appelez-le en utilisant le code dans ma réponse ici: appeler scène storyboard programmatically (sans avoir besoin de suivre)?
logique principale derrière cette is_,
NSString * storyboardIdentifier = @"SecondStoryBoard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];
UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];
[self presentViewController:UIVC animated:YES completion:nil];
importer la classe de contrôleur de vue que vous voulez afficher et utiliser le code suivant
KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart 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];