Ich erstelle programmgesteuert einen UITabBarController mit mehr als 5 Registerkarten (genau 8 untergeordnete Ansichtscontroller).
Mein Zweck ist eine benutzerdefinierte Übergangsanimation für den Tab-Wechsel. Ich richte einen Delegaten für den UITabbarController ein und implementiere die Methode:
- (nullable id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController
animationControllerForTransitionFromViewController:(UIViewController *)fromVC
toViewController:(UIViewController *)toVC
Wenn ich eine Registerkarte durch Senden auswähle:
[tabbarController setSelectedIndex: 6];
Die Methode des Delegaten wird nicht aufgerufen.
Die Methode des Delegierten wird richtig aufgerufen, wenn ich sende
[tabbarController setSelectedIndex: 3];
zB für eine sichtbare Registerkarte.
Noch eine Anmerkung: Wenn der aktuell ausgewählte View-Controller im sichtbaren Bereich 0..3 ist und der nächste View außerhalb des sichtbaren Bereichs 0..3 ist, wird die Delegate-Methode immer noch aufgerufen. Falls der aktuell ausgewählte View-Controller außerhalb des sichtbaren Bereichs 0..3 liegt und der nächste View ebenfalls außerhalb des sichtbaren Bereichs 0..3 liegt, wird die Delegate-Methode nicht aufgerufen. Und ich verliere meine benutzerdefinierte Übergangsanimation. Das ist mein Problem.
Ich habe auch versucht zu senden
[tabbarController setSelectedViewController: someViewController];
Anstatt von
[tabbarController setSelectedIndex: 6];
Es funktioniert nicht.
Ich habe eine schwierige Lösung gemacht.
Ich sammle alle 8 Ansichtscontroller in einem getrennten Array. Nennen Sie es Controller .
Beim Start fülle ich tabbarController.viewcontrollers mit den ersten 5 Controller- Elementen . Weiterhin gibt es 2 Szenarien:
Der Benutzer möchte eine Registerkarte mit einem Index außerhalb des Bereichs 0..4 sehen . Der Benutzer möchte beispielsweise die Registerkarte mit dem Index 6 sehen. Und die aktuell ausgewählte Registerkarte hat beispielsweise den Index 2. In diesem Fall wähle ich eine Zahl im Bereich 0..4 aus, die ungleich dem aktuell ausgewählten Registerindex ist. Zum Beispiel 4. Außerdem ersetze ich tabbarController.viewcontrollers[4] durch controllers[6] . Danach rufe ich an
[tabbarController setSelectedIndex: 4];
Als Ergebnis sehe ich Controller[6] und die Methode des Delegate wird richtig aufgerufen.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen