Präsentieren UIWebview oben auf die aktuell angezeigte view-controller
Ich versuche, Modal anzeigen einer UIWebview oben der aktuell angezeigte view-controller. Der code für popup-webview Leben in einer statischen Bibliothek und hat keine Ahnung über die view-controller Hierarchie der app, in der es lebt. Der code unten funktioniert für meine test-Fällen, aber nicht sicher, ob es funktionieren würde für alle möglich-view-controller-Hierarchien.
UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
UIViewController *presentedVC = [rootViewController presentedViewController];
if (presentedVC) {
//We have a modally displayed viewcontroller on top of rootViewController.
if (!presentedVC.isBeingPresented) {
[presentedVC presentViewController:vc animated:YES completion:^{
//
}];
} else {
rootViewController presentViewController:vc animated:YES completion:^{
//
}];
}
Macht die presentedViewController geben immer die aktuell sichtbare Ansicht-controller?
- Hm, wenn das funktioniert-Id überrascht sein. Es sei denn, ich bin wahnsinnig zu werden, die keyWindow gibt die aktuell sichtbare Fenster, das zuletzt aufgerufen wurde, um
makeKeyAndVisisble
. Um die aktuelle vorgestellt view-controller es hängt alles von Ihrer Hierarchie. Wenn Sie ein modales Bildschirm, das ist es, wenn nicht und Sie haben nav-controller als root-youll haben, sich an der Spitze des stack. Ich denke, es wird ziemlich schwer zu finden Sie die top-view-controller so viele Möglichkeiten zum einrichten der navigation Layer.. - Ich denke, Sie werden wollen, übergeben Sie die aktuelle view-controller als eine Eigenschaft, um Ihre Bibliothek.
- Das ist definitiv eine option, aber ich habe versucht, dieses transparent für den Entwickler die Verwendung der statischen Bibliothek.
- Ich Hinzugefügt eine überprüfung für presentedVC als null. Wie es scheint, presentedVC ist immer null, wenn es keine Modal angezeigt-view-controller auf der Oberseite der rootViewController.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das, was Sie tun möchten, ist die Darstellung der
UIWebView
Modal auf top-immer-View-Controller wird angezeigt, in Ihrer Anwendung, Sie brauchen nicht die "oberste" ein. Abrufen der Root-View-Controller genügt. Ich Mach das die ganze Zeit, Wann immer ich möchte eine Ansicht von oben auf alles andere.Sie müssen nur eine Referenz auf das root-view-controller in Ihrer Bibliothek:
Mit dieser Referenz haben Sie zwei Optionen:
Die erste ist die Verwendung von
UIViewController
's MethodepresentViewController:animated:completion:
zur Anzeige einer anderen Ansicht-Controller enthalten wird IhreUIWebView
Die zweite option ist die Fälschung der modal-view-controller durch hinzufügen einer Untersicht, die den gesamten Bildschirm ausfüllt, hat ein (semi -) transparenten hintergrund, und die die Sicht enthält, den Sie anzeigen wollen "Modal". Hier ist ein Beispiel:
Wenn Sie weitere Fragen haben lass es mich wissen.
Hoffe, das hilft!