Frage

Kann jemand gibt Sie mir den Beispiel-Code, dass ich zum ersten vorhanden, um einen modalen View-Controller verwenden kann, dann entlassen? Dies ist, was ich habe versucht:

    NSLog(@"%@", blue.modalViewController);
    [blue presentModalViewController:red animated:YES];
    NSLog(@"%@", blue.modalViewController);
    [blue dismissModalViewControllerAnimated:YES];
    NSLog(@"%@", blue.modalViewController);
Dieser Code ist in viewDidLoad ( „blau“ und „rot“ sind beide Unterklassen von UIViewController). Ich erwarte, dass ich die rote Ansicht zeigt und dann sofort verstecken, mit einiger Animation. Doch dieses Stück Code stellt nur die modale Ansicht und sie nicht entlassen. Irgendeine Idee? Die ersten Protokoll zeigt „Null“, während die beiden anderen Protokolle zeigen
Ein weiterer Punkt ist, wenn ich diesen Code in applicationDidFinishLaunching setzen: die roten Ansicht überhaupt nicht erscheinen, und alle Protokolle erhalten „null“

War es hilfreich?

Lösung

Vor allem, wenn Sie diesen Code in applicationDidFinishLaunching setzen, könnte es der Fall sein, dass Controller von Interface Builder instanziiert ist noch nicht zu Ihrer Anwendung verknüpft (so „rot“ und „blau“ sind nil noch).

Aber Ihre erste Frage zu beantworten, was Sie falsch zu machen ist, dass Sie dismissModalViewControllerAnimated: auf dem falschen Controller sind zu nennen! Es sollte so aussehen:

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

Normalerweise sind die „roten“ Controller entscheiden sich irgendwann zu entlassen (vielleicht, wenn eine Schaltfläche „Abbrechen“ geklickt wird). Dann wird die „rote“ Controller die Methode auf self nennen könnte:

[self dismissModalViewControllerAnimated:YES];

Wenn es immer noch nicht funktioniert, es könnte etwas mit der Tatsache zu tun hat, dass die Steuerung in einer Animation Art und Weise präsentiert wird, so dass Sie nicht erlaubt werden könnten, die Steuerung so bald nach Vorlage um sie zu schließen.

Andere Tipps

Der einfachste Weg, ich müde in Xcode 4,52 war eine zusätzliche Ansicht zu erstellen und sie verbinden, indem Sie segue modal (Steuer zieht die Schaltfläche Ansicht einer auf den zweiten Blick, wählte Modal). Ziehen Sie dann in einer Schaltfläche auf den zweiten Blick oder die modale Ansicht, dass Sie erstellt haben. Steuerung und ziehen Sie diese Schaltfläche, um die Header-Datei und die Nutzung Aktion Verbindung. Dies wird eine IBAction in Ihrer Controller.m Datei erstellen. Finden Sie Ihre Schaltfläche Aktionstyp im Code.

[self dismissViewControllerAnimated:YES completion:nil];

Swift

Aktualisiert für Swift 3

 image description hier

eingeben

Storyboard

Erstellen Sie zwei View-Controller mit einem Knopf auf jedem. Für die zweiten View-Controller, stellen Sie die Klassennamen SecondViewController und Storyboard-ID 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:

PresentModalViewController:

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

dismissModalViewController:

[self dismissModalViewControllerAnimated:YES];

Swift

self.dismissViewControllerAnimated(true, completion: nil)

Der einfachste Weg, es zu tun ist, mit Storyboard und ein Segue.

Erstellen Sie einfach eine Segue vom FirstViewController (nicht die Navigation Controller) Ihres TabBarController zu einem LoginViewController mit dem Login-UI und nennen Sie es "showLogin".

Erstellen Sie eine Methode, dass die Rendite ein BOOL zu bestätigen, wenn der Benutzer angemeldet und / oder seine / ihre Sitzung gültig ist ... vorzugsweise auf der AppDelegate. Nennen Sie es isSessionValid.

Auf Ihrem FirstViewController.m die Methode viewDidAppear außer Kraft setzen, wie folgt:

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

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

Dann, wenn der Benutzer erfolgreich angemeldet, nur entlassen oder Pop-out der LoginViewController Ihre Tabs zu zeigen.

Funktioniert 100%!

Hope, es hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top