Holen Sie sich die Ansicht-controller, schob die sichtbare view-controller
Habe ich eine app mit UINavigationController
drückt, dass eine UITabBarController
in Sicht. Diese UITabBarController
verfügt über vier Registerkarten, eine davon zeigt eine benutzerdefinierte UIViewController
eine Instanz von EventInformationViewController
. Eine Schaltfläche in diesem custom-view-controller wiederum drückt eine andere custom-view-controller EventRatingAddViewController
in Sicht. Eine Aktion, die in diesem view-controller sollte eine Methode aufzurufen, die in der EventInformationViewController
Instanz. Der folgende code lässt die app Abstürzen statt:
//get the index of the visible VC on the stack
int myIindex = [self.navigationController.viewControllers indexOfObject:self.navigationController.visibleViewController];
//get a reference to the previous VC
EventInformationViewController *prevVC = (EventInformationViewController *)[self.navigationController.viewControllers objectAtIndex:myIindex - 1];
[prevVC performSelector:@selector(rateCurrentEvent:)];
Dachte ich, dass die viewControllers-Eigenschaft ein array mit allen VCs auf die navigation stack, so dass der index des aktuell sichtbaren eins minus eins sollte auf den VC schob die aktuell sichtbaren VC in Sicht. Es scheint vielmehr zeigen Sie auf meine UITabBarController
:
-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance
Was ist mit, dass und noch wichtiger, wie bekomme ich einen Zeiger auf die VC schob die derzeit visisble VC in Sicht?
EDIT: ich landete ein delegate-Protokoll für die EventRatingAddViewController
und die Zuordnung der EventInformationViewController
als Delegierter. Dies funktioniert gut - trotzdem denke ich sollte es eine Möglichkeit zum Zugriff auf das drängen VC durch die navigation stack.
- Nicht eine Antwort auf Ihre Frage, aber Sie sollten
.topViewController
statt.visibleViewController
als letzteres könnte auch ein Modal vorgestellt view-controller, das hat nichts zu tun mit dem Navigations-controller-stack! - Haben Sie versucht, die Protokollierung
myIindex
und der index des UITabBarController, die Sie bekommen? - Guter Ausgangspunkt um die topViewController. Nicht machen einen Unterschied in diesem Fall, da ich keine modale VCs in meiner app. Die sichtbare VC bekommt den index 2, der UITabBarController 1.
- Warum sind Sie im Konfigurationsbereich einen tab bar controller mit nur 1 tab? Warum nicht einfach präsentieren a-view-controller, indem Sie ihn auf den Stapel oder Modal
- die UITabBarController hat vier Registerkarten, es ist nur dieser eine unter Berücksichtigung, dass eine VC-drückt, dass eine neue VC auf dem Stapel.
- bearbeitet die Frage, um klar zu machen, dass die UITabBarController hat mehr tabs als die unter Berücksichtigung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir ziemlich sicher, dass
UITabBarController
in der Tat schieben Sie Ihre aktuelle Ansicht-controller, aber das, was Sie suchen, ist der view-controller eines dieserUITabBarController
's Tabletten, die view-controller, die sichtbar wurde in derUITabBarController
an der Zeit, dieseUITabBarController
schob Ihre view controller an den navigation-stack. VielleichtUITabBarController
schob Ihre view-controller auf den stack, weil es wurde gesagt, dies zu tun durch die sichtbare tab-view-controller, also wäre es so etwas wie dieses:[self.tabBarController.navigationController pushViewController:someViewController];
.Den Weg, um herauszufinden, was view-controller wurde gezeigt, die in der
UITabBarController
an der Zeit, die Ihre view-controller auf den stack geschoben wird, ist die Verwendung der.selectedViewController
Eigenschaft, so dass würde in etwa diese Ausgabe ergeben: