HINWEIS: Diese Lösung ist in iOS 8 defekt. Ich werde die neue Lösung so schnell wie möglich veröffentlichen.
Ich werde hier mit Storyboard antworten, aber es ist auch ohne Storyboard möglich.
Init: Erstellen Sie zwei UIViewController
im Storyboard.
- Nehmen wir an,
FirstViewController
was normal ist und SecondViewController
welches das Popup sein wird.
Modal Segue: Setzen Sie UIButton
in FirstViewController und Segue auf diese erstellen UIButton
zu SecondViewController
modal segue.
Transparent machen: Wählen Sie nun UIView
( UIView
die standardmäßig mit erstellt wird UIViewController
) von SecondViewController
und ändern Sie die Hintergrundfarbe in klare Farbe.
Machen Hintergrund Dim: Fügen Sie ein UIImageView
in SecondViewController
der ganzen Bildschirm ausfüllt und setzt sein Bild bis zu einem gewissen gedimmt halbtransparentes Bild. Ein Beispiel erhalten Sie hier: UIAlertView
Hintergrundbild
Display-Design: Fügen Sie nun ein Design hinzu UIView
und erstellen Sie ein beliebiges Design, das Sie anzeigen möchten. Hier ist ein Screenshot meines Storyboards
- Hier habe ich eine Schaltfläche zum Anmelden hinzugefügt, die
SecondViewController
als Popup geöffnet wird , um nach Benutzername und Passwort zu fragen
Wichtig: Nun zum Hauptschritt. Wir möchten, dass SecondViewController
FirstViewController dadurch nicht vollständig ausgeblendet wird. Wir haben klare Farben eingestellt, aber das reicht nicht aus. Standardmäßig wird hinter der Modellpräsentation Schwarz hinzugefügt, sodass in viewDidLoad von eine Codezeile hinzugefügt werden muss FirstViewController
. Sie können es auch an einer anderen Stelle hinzufügen, es sollte jedoch vor dem Übergang ausgeführt werden.
[self setModalPresentationStyle:UIModalPresentationCurrentContext];
Entlassen: Wann entlassen werden muss, hängt von Ihrem Anwendungsfall ab. Dies ist eine modale Präsentation. Um dies zu verwerfen, tun wir das, was wir für eine modale Präsentation tun:
[self dismissViewControllerAnimated:YES completion:Nil];
Das ist alles.....
Vorschläge und Kommentare sind willkommen.
Demo:
Sie können das Demo-Quellprojekt von Here: Popup Demo herunterladen
NEU : Jemand hat bei diesem Konzept sehr gute Arbeit geleistet: MZFormSheetController
Neu : Ich habe einen weiteren Code gefunden, um diese Art von Funktion zu erhalten: KLCPopup
iOS 8-Update : Ich habe diese Methode für iOS 7 und iOS 8 entwickelt
+ (void)setPresentationStyleForSelfController:(UIViewController *)selfController presentingController:(UIViewController *)presentingController
{
if (iOSVersion >= 8.0)
{
presentingController.providesPresentationContextTransitionStyle = YES;
presentingController.definesPresentationContext = YES;
[presentingController setModalPresentationStyle:UIModalPresentationOverCurrentContext];
}
else
{
[selfController setModalPresentationStyle:UIModalPresentationCurrentContext];
[selfController.navigationController setModalPresentationStyle:UIModalPresentationCurrentContext];
}
}
Kann diese Methode in prepareForSegue deligate wie folgt verwenden
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
PopUpViewController *popup = segue.destinationViewController;
[self setPresentationStyleForSelfController:self presentingController:popup]
}