Как определить, какой индекс панели вкладок мой контроллер представления - PullRequest
5 голосов
/ 09 марта 2011

Может кто-нибудь сказать мне, как я могу определить, какой индекс панели вкладок находится в контроллере представления.

, чтобы упростить - я могу в данный момент перейти к tabBarItem путем жесткого кодирования его индекса.

self.tabBarController.selectedIndex = 3;

Однако, если пользователь настраивает элементы панели вкладок, есть вероятность, что viewController под номером 3 будет не тем, который будет нужен пользователю, поскольку он был перемещен.Как я могу определить, куда он переместился, чтобы я мог выбрать правильный.

Любая помощь, пожалуйста.

Спасибо,

Ли

Ответы [ 3 ]

15 голосов
/ 09 марта 2011

Используйте свойство self.tabBarController.selectedViewController.

ОБНОВЛЕНИЕ : Чтобы получить индекс определенного viewController, используйте:

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController];
1 голос
/ 09 марта 2011

Вы можете получить список контроллеров в UITabBar и сравнить по значению указателя.Например, контроллер представления, который находится в UITabBar, может определить свое местоположение следующим образом:

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);
0 голосов
/ 13 апреля 2011

хорошо, так что мне не повезло ни с одним из ответов успешно - но я все разобрал, так что подумал, что объясню, как я это сделал, если есть кто-то, кто застрянет, пытаясь сделать то, что я сделал.

каждому tabBarItem на моем контроллере панели вкладок был присвоен тег, который начинался с 0 и, скажем, заканчивался 8. (можно сделать и в IB)

убедитесь, что делегат для tabBarController и т. Д. Все установлен и добавлен следующий метод делегата:

- (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];

}

(обратите внимание, я использую navControllers поверх ViewControllers в моем приложении, следовательно, для цикла)

так что теперь я смог просто проверить, есть ли в prefs массив с новым порядком вкладок

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


if(tabBarOrder) { ... }

если бы был порядок панели вкладок, я мог бы получить индекс нужного мне VC с помощью '[tabBarOrder indexOfObjectIdenticalTo: [NSNumber numberWithInt: theViewsTagImAfter]];

и если в prefs не было массива, вы можете смело предположить, что он не перемещался и находится там, где находится.

**

Любой не стесняется разрушить то, как я это сделал, если вы чувствуете, что могли бы сделать это более гладким способом. однако, это работает, и другие предложения не сделали.

...