Question

Quelqu'un peut-il me donner le code exemple que je peux utiliser pour présenter un premier contrôleur de vue modal, puis le rejeter? Voilà ce que j'ai essayé:

    NSLog(@"%@", blue.modalViewController);
    [blue presentModalViewController:red animated:YES];
    NSLog(@"%@", blue.modalViewController);
    [blue dismissModalViewControllerAnimated:YES];
    NSLog(@"%@", blue.modalViewController);
Ce code est en viewDidLoad ( « bleu » et « rouge » sont les deux sous-classes de UIViewController). Je pense que je vais montrer la vue rouge puis cacher immédiatement, avec une animation. Cependant ce morceau de code ne présente que le point de vue modal et ne rejette pas. Une idée? Le premier journal affiche « null » tandis que les deux autres journaux montrent
Un autre point est, si je mets ce code dans applicationDidFinishLaunching: la vue rouge ne semble pas du tout, et tous les journaux obtenir « null »

Était-ce utile?

La solution

Tout d'abord, quand vous mettez ce code dans applicationDidFinishLaunching, il pourrait être le cas que les contrôleurs instanciés de Interface Builder ne sont pas encore liés à votre application (donc « rouge » et « bleu » sont encore nil).

Mais pour répondre à votre question initiale, ce que vous faites mal que vous appelez dismissModalViewControllerAnimated: sur le mauvais contrôleur! Il devrait être comme ceci:

[blue presentModalViewController:red animated:YES];
[red dismissModalViewControllerAnimated:YES];

En général, le contrôleur « rouge » doit décider de se rejeter à un moment donné (peut-être quand un bouton « annuler » est cliqué). Ensuite, le contrôleur « rouge » pourrait appeler la méthode sur self:

[self dismissModalViewControllerAnimated:YES];

Si cela ne fonctionne toujours pas, il pourrait avoir quelque chose à voir avec le fait que le contrôleur est présenté d'une manière d'animation, de sorte que vous pourriez ne pas être autorisé à rejeter le contrôleur si peu de temps après sa présentation.

Autres conseils

La meilleure façon que je fatigué Xcode 4,52 était de créer une vue supplémentaire et de les connecter à l'aide modale Segue (contrôle faites glisser le bouton de la vue une à la deuxième vue, a choisi Modal). Ensuite, faites glisser dans un bouton à la seconde vue ou la vue modale que vous avez créé. Commande et faites glisser ce bouton dans le fichier d'en-tête et d'utiliser la connexion d'action. Cela va créer un IBAction dans votre fichier Controller.m. Trouvez votre type d'action bouton dans le code.

[self dismissViewControllerAnimated:YES completion:nil];

Swift

Mise à jour pour Swift 3

 ici

Storyboard

Créer deux contrôleurs de vue avec un bouton sur chaque. Pour le deuxième contrôleur de vue, définissez le nom de classe à SecondViewController et l'ID story-board à secondVC.

code

ViewController.swift

import UIKit
class ViewController: UIViewController {

    @IBAction func presentButtonTapped(_ sender: UIButton) {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myModalViewController = storyboard.instantiateViewController(withIdentifier: "secondVC")
        myModalViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
        myModalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical
        self.present(myModalViewController, animated: true, completion: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {

    @IBAction func dismissButtonTapped(_ sender: UIButton) {
        self.dismiss(animated: true, completion: nil)
    }
}

Source:

presentModalViewController:

MainViewController *mainViewController=[[MainViewController alloc]init];
[self.navigationController presentModalViewController:mainViewController animated:YES];

dismissModalViewController:

[self dismissModalViewControllerAnimated:YES];

Swift

self.dismissViewControllerAnimated(true, completion: nil)

La meilleure façon de le faire est d'utiliser Storyboard et Segue.

Il suffit de créer un Segue du FirstViewController (pas le contrôleur de navigation) de votre TabBarController à un LoginViewController avec l'interface utilisateur de connexion et nommez-le « showLogin ».

Créer une méthode qui renvoie un BOOL pour valider si l'utilisateur connecté et / ou son / sa séance est valable ... de préférence sur le AppDelegate. Appelez-le isSessionValid.

Sur votre FirstViewController.m remplacer la méthode viewDidAppear comme suit:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if([self isSessionValid]==NO){
        [self performSegueWithIdentifier:@"showLogin" sender:self];
    }
}

Ensuite, si l'utilisateur connecté avec succès, tout rejeter ou pop-le LoginViewController pour afficher vos onglets.

fonctionne à 100%!

it helps!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top