Ich benötige eine Instanz von Root View Controller.
Ich habe diese Ansätze ausprobiert:
UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
Rückgabe: null :
Auch wenn ich versuche, ein Array von Controllern zu bekommen:
NSArray *viewControllers = self.navigationController.viewControllers;
Es wird nur ein Controller zurückgegeben, aber es ist nicht mein Root-View-Controller.
Wenn ich versuche, vom Navigationscontroller zu nehmen:
UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];
Rückgabe: null :
Irgendwelche Ideen warum? Was könnte ich sonst noch versuchen, eine Instanz meines Root View Controllers zu erhalten?
Vielen Dank.
objective-c
swift
ios5
uiviewcontroller
uinavigationcontroller
Straßenjunge
quelle
quelle
Antworten:
Wenn Sie versuchen, auf die
rootViewController
in Ihrem AppDelegate festgelegten Werte zuzugreifen. Versuche dies:Ziel c
Schnell
Swift 3
Swift 4 & 4.2
Swift 5 & 5.1 & 5.2
quelle
Ziel c
Swift 2.0
Swift 5
quelle
Wie hier von @ 0x7fffffff vorgeschlagen, kann es einfacher sein, UINavigationController zu verwenden:
Der Code in der obigen Antwort gibt den UINavigation-Controller zurück (falls vorhanden). Wenn Sie diesen benötigen, können Sie ihn verwenden
self.navigationController
.quelle
Wenn Sie keinen guten Grund haben, gehen Sie in Ihrem Root-Controller folgendermaßen vor:
Und wenn Sie es benachrichtigen möchten:
quelle
Swift 3
quelle
Schneller Weg, Sie können dies von überall aus aufrufen. Es wird optional zurückgegeben. Achten Sie also darauf:
Es ist als Standardfunktion enthalten in:
https://github.com/goktugyil/EZSwiftExtensions
quelle
Swift 3: Chage ViewController ohne Segue und sende AnyObject Verwendung: Identity MainPageViewController auf dem Ziel-ViewController
oder wenn Sie den View Controller ändern und Daten senden möchten
quelle