2013-07-16 8 views
22

Próbuję animować przejścia między kartami w moim UITabBarController, który działa poprawnie po naciśnięciu przycisków tabulacji. Jednak, kiedy przełączać karty programowo przez wywołanieJak mogę programowo ustawić wybraną zakładkę UITabBarController, jednocześnie uruchamiając shouldSelectViewController w UITabBarControllerDelegate

[self.tabBarController setSelectedIndex:2]; 

w rozpoznawania gestów machnięcia, funkcja shouldSelectViewController NIE jest nazywany w moim UITabBarControllerDelegate delegata, a więc moja animacja nie jest uruchomiony.

Czy istnieje sposób na osiągnięcie tego, czego chcę? Czy mogę programowo uruchamiać przełączanie kart inaczej, może to wywołać funkcję shouldSelectViewController?

+1

Tak, możesz w trybie progresywnym wywołać delegata. To będzie działać. [self.tabBarController setSelectedIndex: 2]; nada podświetlony efekt odpowiedniemu tabbaritem –

+0

@Puneet Jak wywołać metodę shouldSelectViewController delegata UITabBarControllerDelegate? – herrtim

+2

Jeśli ustawiłeś element tabbarcontroller jako katalog główny aplikacji, musisz ustawić metodę delegata na delegacie aplikacji. Możesz więc wywołać to z innego widoku Comtrollers, tworząc obiekt AppDelegate. musisz przekazać dwa parametry, jeden to tabbarController, który możesz otrzymać również app4element, a drugi to ViewController, który chcesz pokazać. –

Odpowiedz

45

Jeśli zaimplementowano - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController w delegacie tabBarController, niż można go wywołać ręcznie.

[self.tabBarController.delegate tabBarController:self.tabBarController shouldSelectViewController:[[tabBar viewControllers] objectAtIndex:2]]; 
[self.tabBarController setSelectedIndex:2]; 

Mam nadzieję, że to pomoże.

+0

Doskonale, dzięki. Wraz z powyższymi komentarzami Puneeta działałem! – herrtim

+10

Nie, metody delegatów NIE są przeznaczone do ręcznego wywoływania! Metoda powinna zostać wywołana, jeśli coś się stanie. Z twoim rozwiązaniem mógłbym umieścić 'return NO' w' - (BOOL) tabBarController: shouldSelectViewController: 'i kontroler nadal będzie wybrany. – Kuba

+0

Geniusz. Wielkie dzięki. – NaXir