Frage Wie kann ich feststellen, welcher Tabbar-Index mein View-Controller ist?


Kann mir bitte jemand sagen, wie ich feststellen kann, in welchem ​​Tab-Register sich ein View-Controller befindet.

um zu vereinfachen - ich kann im Moment zu einem TabBarItem springen, indem ich seinen Index fest codiere.

self.tabBarController.selectedIndex = 3;

Sollte der Benutzer jedoch die Tab-Leiste-Elemente anpassen, besteht die Möglichkeit, dass der viewController an Nummer 3 nicht der ist, den der Benutzer haben möchte, wenn er verschoben wurde. Wie kann ich feststellen, wohin es bewegt wurde, damit ich das richtige auswählen kann?

Irgendwelche Hilfe bitte.

Vielen Dank,

Lee


5
2018-03-09 09:15


Ursprung


Antworten:


Benutze die self.tabBarController.selectedViewController Eigentum.

AKTUALISIERENUm den Index eines bestimmten ViewControllers zu erhalten, verwenden Sie:

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController];

15
2018-03-09 09:20



Sie können die Liste der Controller in der UITabBar abrufen und anhand des Zeigerwerts vergleichen. Ein View-Controller, der sich in einer UITabBar befindet, kann beispielsweise seinen Standort folgendermaßen ermitteln:

int loc = 0;
for (UIViewController *vc  in [self.tabBarController viewControllers]){
    if (vc == self.navigationController || vc == self){
        break;
    }
    loc++;
}
if (loc == [[self.tabBarController viewControllers] count])
     NSLog(@"Could not find me!");
else
     NSLog(@"Im in tab:% d",loc);

1
2018-03-09 09:29



OK, also hatte ich kein Glück mit irgendeiner der Antworten erfolgreich - aber ich sortierte es so, dass ich dachte, ich würde erklären, wie ich es gemacht habe, wenn da jemand anderes steckenbleibt, der versucht, das zu tun, was ich getan habe.

Jedem tabBarItem auf meinem Tab-Bar-Controller wurde ein Tag zugewiesen, das mit 0 begann und mit 8 endete. (Kann auch in IB gemacht werden)

Stellen Sie sicher, dass delegate für tabBarController usw. festgelegt ist, und implementieren Sie die folgende Delegate-Methode:

- (void)tabBarController:(UITabBarController *)theTabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed {

NSInteger count = self.tabBarController.viewControllers.count;
NSMutableArray *tabOrderArray = [[NSMutableArray alloc] initWithCapacity:count];


for (UINavigationController *viewController in viewControllers)
{
    NSInteger tag = viewController.tabBarItem.tag;
    [tabOrderArray addObject:[NSNumber numberWithInteger:tag]];
}

[prefs setObject:tabOrderArray forKey:@"tabOrder"];
[prefs synchronize]; // optional
[tabOrderArray release];

}

(Bitte beachten Sie, dass ich navControllers in ViewControllern in meiner App verwende, also für for loop)

Also, was ich jetzt tun konnte, war einfach zu überprüfen, ob es ein Array in den Einstellungen mit einer neuen Tab-Reihenfolge gab

NSArray * tabBarOrder = [prefs objectForKey:@"tabOrder"];


if(tabBarOrder) { ... }

Wenn es eine Tab-Bar-Reihenfolge gäbe, könnte ich den Index der VC bekommen, die ich wollte mit '[tabBarOrder indexOfObjectIdenticalTo: [NSNummer numberWithInt: theViewsTagImafter]];

und wenn es in prefs kein Array gab, kann man sicher annehmen, dass es sich nicht bewegt hat und wo es ist.

**

Jeder kann frei zerstören, wie ich das getan habe, sollten Sie das Gefühl haben, dass Sie dies auf eine elegantere Weise erreicht haben könnten. Allerdings funktioniert das und die anderen Vorschläge nicht.


0
2018-04-13 12:16