it-swarm.com.de

Modal View Controller anzeigen und schließen

Kann mir jemand den Beispielcode geben, mit dem ich einen modalen Ansichtscontroller zuerst präsentieren und dann schließen kann? Das habe ich versucht:

 NSLog (@ "% @", blue.modalViewController); 
 [Blue presentModalViewController: red animated: YES]; 
 NSLog (@ "% @", blue.modalViewController) ; 
 [blue dismissModalViewControllerAnimated: YES]; 
 NSLog (@ "% @", blue.modalViewController); 

70
phunehehe

Erstens, wenn Sie diesen Code in applicationDidFinishLaunching einfügen, ist es möglich, dass Controller, die über Interface Builder instanziiert wurden, noch nicht mit Ihrer Anwendung verknüpft sind ("red" und "blue" sind also immer noch nil).

Aber um Ihre erste Frage zu beantworten, machen Sie falsch, dass Sie dismissModalViewControllerAnimated: Auf dem falschen Controller aufrufen! Es sollte so sein:

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

Normalerweise sollte sich der "rote" Controller irgendwann selbst entlassen (möglicherweise, wenn auf die Schaltfläche "Abbrechen" geklickt wird). Dann könnte der "rote" Controller die Methode auf self aufrufen:

[self dismissModalViewControllerAnimated:YES];

Wenn dies immer noch nicht funktioniert, hat dies möglicherweise damit zu tun, dass der Controller in Form einer Animation dargestellt wird. Daher können Sie den Controller möglicherweise nicht so bald nach seiner Darstellung schließen.

106

Swift

Aktualisiert für Swift 3

enter image description here

Storyboard

Erstellen Sie zwei View Controller mit jeweils einer Schaltfläche. Setzen Sie für den zweiten Ansichtscontroller den Klassennamen auf SecondViewController und die Storyboard-ID auf 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)
    }
}

Quelle:

13
Suragch

Die einfachste Möglichkeit, mit xcode 4.52 fertig zu werden, bestand darin, eine zusätzliche Ansicht zu erstellen und diese mithilfe des Segue-Modals zu verbinden (ziehen Sie die Schaltfläche von Ansicht 1 in die zweite Ansicht, und wählen Sie Modal aus). Ziehen Sie dann eine Schaltfläche in die zweite Ansicht oder in die von Ihnen erstellte modale Ansicht. Steuern und ziehen Sie diese Schaltfläche in die Header-Datei und verwenden Sie die Aktionsverbindung. Dadurch wird eine IBaction in Ihrer controller.m-Datei erstellt. Finden Sie Ihren Button Aktionstyp im Code.

[self dismissViewControllerAnimated:YES completion:nil];
13
max

presentModalViewController:

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

dismissModalViewController:

[self dismissModalViewControllerAnimated:YES];
9
Jerry Thomsan

Swift

self.dismissViewControllerAnimated(true, completion: nil)

3
Michael

Am einfachsten geht das mit Storyboard und Segue.

Erstellen Sie einfach einen Segue vom FirstViewController (nicht dem Navigationscontroller) Ihres TabBarControllers zu einem LoginViewController mit der Login-Benutzeroberfläche und nennen Sie ihn "showLogin".

Erstellen Sie eine Methode, die eine BOOL zurückgibt, um zu überprüfen, ob der angemeldete Benutzer und/oder seine Sitzung gültig sind ... vorzugsweise im AppDelegate. Nennen Sie es isSessionValid.

Überschreiben Sie auf Ihrem FirstViewController.m die Methode viewDidAppear wie folgt:

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

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

Wenn sich der Benutzer erfolgreich angemeldet hat, schließen Sie einfach den LoginViewController oder öffnen Sie ihn, um Ihre Registerkarten anzuzeigen.

Funktioniert zu 100%!

Ich hoffe es hilft!

2
Oscar S.