2011-09-17 17 views
6

Obecnie staram się wywołać „didSelectViewController” metodę programowo za pomocą następującego kodu:Jak programowo uruchomić metodę "tabBarController: didSelectViewController:"?

self.tabController.selectedViewController 
     = [self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]; 

Jednak metoda „didSelectViewController” nie został powołany. Jak mogę uruchomić tę metodę bez konieczności ręcznego wybierania paska kart?

+1

nb zachowanie "tabBarController: didSelectViewController:" zmieniono za pomocą iOS 3. W wersjach wcześniejszych niż 3 metoda ta była wywoływana zarówno dla zmian programowych, jak i zainicjowanych przez użytkownika dla wybranego kontrolera widoku. W systemie iOS 3 i nowszym funkcja ta jest wywoływana tylko w odpowiedzi na naciśnięcia użytkownika na pasku kart i nie jest wywoływana, gdy kod zmienia programowo zawartość paska kart. – albertamg

+0

Zastanawiam się, dlaczego chcesz to osiągnąć. – Raptor

Odpowiedz

16
self.tabController.selectedIndex = NEWSTAB_INDEX; // to actually switch to the controller (your code would work as well) - not sure if this does or not send the didSelectViewController: message to the delegate 
[self.tabController.delegate tabBarController:self.tabController didSelectViewController:[self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]]; // send didSelectViewController to the tabBarController delegate 
+0

To działało. Testowałem! – user523234

+0

tak, działa również dla mnie. Ale dlaczego musisz to robić? W moim przypadku UITabbarControllerDelegate jest oddzielną klasą, NSObject i implementuje metody delegatów. Problem polega na tym, że jeśli przełączę tabulator programowo, metody delegatów nie są wywoływane. Jeśli przełączysz się, klikając na same zakładki, to działa. Nie mogłem jeszcze ustalić, dlaczego tak się dzieje. – Zsolt

+0

@Zsolt to sposób, w jaki delegat został uznany przez Apple (wywołany interakcją z użytkownikiem) i ma to jakiś sens. Po zmianie programowej wiesz już, że uległa ona zmianie, więc w niektórych sytuacjach może nie być sensu wyzwalanie delegata. –

0

Swift 3.0 można programowo wywołać metodę delegata umieszczenie zakładek jak ten

self.tabController.selectedIndex = index (e.g. 0,1...etc) 
self.tabController.delegate.tabBarController(self.tabController, didSelectViewController: self.tabController.viewControllers[index]) 
Powiązane problemy