0

bekomme Ich habe ViewController 1 mit Navigation Controller, wo ich einige andere VC schieben möchte. Aber ich habe ViewController 2 darüber nicht in der Navigation Controller-Hierarchie dargestellt. In ViewController 2 habe ich einige Methoden, um es zu minimieren, aber ich kann den Navigationscontroller in ViewController 1 nicht erreichen, um andere VC dorthin zu schieben. Ich versuchte, es aus dem Fenster mit dem Code zu tun:Ziel C: Wie man Navigation Controller von ViewController hinter meinem aktuellen ViewController

UITabBarController *mTabBarVC = (UITabBarController *) [UIApplication sharedApplication].keyWindow.rootViewController; 
UINavigationController *prevNavigationController = myTabBarVC.selectedViewController.navigationController; 

Aber ich hatte keinen Erfolg ich null in prevNavigationController bekommen. Könnte mir jemand bekommen einen ha helfen

+0

Was zeigen NSLog (@ "% @", mTabBarVC)? – Igor

+0

und NSLog (@ "% @", myTabBarVC.selectedViewController)? – Igor

+0

überprüfen, wenn keyWindow.rootViewController wirklich UITabBarController, nicht ein anderer Controller – Igor

Antwort

0
UIViewController *myVC1 = [UIViewController new]; 
[self pushViewController:myVC1 animated:YES]; 

UIViewController *myVC2 = [UIViewController new]; 
[myVC1 presentViewController:myVC2 animated:YES completion:nil]; 

, wenn Sie jetzt bekommen navigationVC von myVC1 von myVC2 wollen, müssen Sie myVC2.presentingViewController.navigationController

Für UITabBarController schreiben, wäre es ein bisschen anders sein. Ihr .selectedViewController war nicht pushed, noch presented. Versuchen Sie die Initialisierung alle seine Controller mit UINavigationController ist wie folgt aus:

NSMutableArray *myArray = [NSMutableArray new]; 
for (int i = 0; i < 3; i++) 
{ 
    UIViewController *customVC = [UIViewController new]; 
    UINavigationViewController *myNavVC = [UINavigationViewController initWithRootViewController:customVC]; 
    [myArray addObject:myArray]; 
} 
self.viewControllers = myArray.copy; 
self.selectedViewController = myArray.firstObject; 

Nun würde jeder VC seine eigene navigationVC haben, die mit myArray[index].navigationController

+0

Wie ich sagte self.presentViewController in anderen Hierarchie. – user3742622

+0

UITabBarController hat eine andere Logik. Lass mich meine Antwort ändern – OlDor

+0

@ user3742622, fertig. Bitte kommentieren Sie, wenn Sie Fragen haben. – OlDor

0

in Viewcontroller 2.h erstellen abgerufen werden können:

@property UIViewController *parent; 

In Viewcontroller 1 Pass selbst:

viewController2.parent = self; 

In 2 Viewcontroller können Sie jetzt UINavigationController erhalten:

UINavigationController *navVC = self.parent.navigationController; 

Es ist die beste Art und Weise, weil Sie Struktur Ihrer Ansicht-Controller in Zukunft ändern kann und wird einen Fehler bekommen.

Wenn ViewController 2 modal auf ViewController 1 vorhanden ist, können Sie VC1 von VC2 in self.presentingViewController Eigenschaft erhalten.