Einen modalen Controller vorstellen, ohne den aktuellen View Controller zu kennen?
Gibt es einen Weg, um eine Modal-view-controller, ohne zu wissen, was die sichtbare view-controller view ist? Im Grunde ähnlich wie du, zeigt sich eine Warnung anzeigen zu jedem Punkte in der Zeit.
Ich würde gerne in der Lage sein, etwas zu tun:
MyViewController *myVC = [[MyViewController alloc] init];
[myVC showModally];
Ich würde gerne in der Lage sein zu rufen, von überall in der app, und es erscheinen an der Spitze. Ich will nicht zu kümmern, was die aktuelle view-controller ist.
Ich Plane, verwenden Sie diese, um zu zeigen, einen login-prompt. Ich will nicht zu verwenden, eine Warnmeldung anzuzeigen, und ich will auch nicht zu haben-Anmeldung Präsentation code der gesamten app.
Irgendwelche Gedanken zu dieser? Oder gibt es vielleicht einen besseren Weg, dies zu erreichen? Soll ich das einfach umsetzen meiner eigenen Mechanismus und einfach eine Ansicht oben auf dem Fenster?
InformationsquelleAutor der Frage nebs | 2013-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, können Sie die Kette.
Beginnen bei
[UIApplication sharedApplication].delegate.window.rootViewController
.In jedem view-controller führen Sie die folgende Reihe von test.
Wenn
[viewController isKindOfClass:[UINavigationController class]]
dann gehen Sie zu[(UINavigationController *)viewController topViewController]
.Wenn
[viewController isKindOfClass:[UITabBarController class]]
dann gehen Sie zu[(UITabBarController *)viewController selectedViewController]
.Wenn
[viewController presentedViewController]
dann gehen Sie zu[viewController presentedViewController]
.InformationsquelleAutor der Antwort Jeffery Thomas
Meine Lösung in Swift (inspiriert durch den Kern MartinMoizard)
InformationsquelleAutor der Antwort allaire
Haben, könnten Sie diesen code implementiert in Ihrem app-delegate:
AppDelegate.m
AppDelegate.h
Aus, Wo
In Ihrer Stellvertretung, Sie sind immer die
rootViewController
deswindow
. Dies wird immer sichtbar sein - es ist das 'parent' - controller alles.InformationsquelleAutor der Antwort Undo
Diese Lösung gibt Ihnen die meisten top-view-controller, so dass Sie behandeln können Besondere Bedingungen bevor. Zum Beispiel, möchten Sie vielleicht, um Ihre view-controller nur, wenn die meisten top-view-controller ist nicht eine bestimmte view-controller.
Mit diesem können Sie Ihr view-controller von überall, ohne zu wissen, was die meisten top-view-controller ist
Oder präsentieren Sie Ihre view-controller nur, wenn die meisten top-view-controller ist nicht eine bestimmte view-controller
Eine Sache zu beachten ist, dass, wenn es eine UIAlertController gerade angezeigt wird,
UIApplication.topMostViewController
zurückUIAlertController
. Präsentiert auf der Spitze einesUIAlertController
hat sich komisch Verhalten und sollte vermieden werden. Als solche, sollten Sie entweder manuell überprüfen, dass!(UIApplication.topMostViewController is UIAlertController)
bevor die Vorlage oder fügen Sie einelse if
Fall zur Rückgabe nil, wennself is UIAlertController
InformationsquelleAutor der Antwort NSExceptional
Ich glaube nicht, dass Sie unbedingt wissen müssen, welche view-controller sichtbar ist. Sie können die
keyWindow
von der Anwendung und fügen Sie Ihren modal-view-controller - Ansicht an die Spitze der Liste der Ansichten. Dann können Sie damit es funktioniert, wie dieUIAlertView
.Interface-Datei: MyModalViewController.h
Umsetzung Datei: MyModalViewController.m
InformationsquelleAutor der Antwort Jason Barker