2013-07-16 9 views
22

Sto provando ad animare le transizioni tra le schede del mio UITabBarController, che funziona bene quando premo i pulsanti di tabulazione. Tuttavia, quando passo le schede di programmazione chiamandoCome posso impostare a livello di programmazione la scheda selezionata di UITabBarController attivando anche shouldSelectViewController in UITabBarControllerDelegate

[self.tabBarController setSelectedIndex:2]; 

in un riconoscitore colpo gesto, la funzione shouldSelectViewController NON è chiamato nel mio UITabBarControllerDelegate delegato, e quindi la mia animazione non viene attivato.

C'è un modo per realizzare ciò che voglio? Posso attivare a livello di codice l'interruttore di tabulazione in modo diverso forse in modo che venga chiamata la funzione shouldSelectViewController?

+1

Sì, è possibile chiamare il delegato in modo programmatico. Funzionerà. [self.tabBarController setSelectedIndex: 2]; darà l'effetto evidenziato al tabbaritem corrispondente –

+0

@Puneet Come posso chiamare il metodo shouldSelectViewController del delegato UITabBarControllerDelegate? – herrtim

+2

Se è stato impostato tabbarcontroller come root dell'applicazione, è necessario impostare il relativo metodo delegate presso l'app delegato. Quindi puoi chiamarlo da un'altra vista Comtrollers creando un oggetto di AppDelegate. è necessario passare due parametri, uno è TabbarController, che è possibile ottenere anche da AppDelegate e altro è il ViewController che si desidera mostrare. –

risposta

45

Se nel delegato di tabBarController è stato implementato - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController, è possibile chiamarlo manualmente.

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

Spero che questo aiuti.

+0

Perfetto, grazie. Insieme ai commenti di Puneet, ho funzionato! – herrtim

+10

No, i metodi delegati NON sono per le chiamate manuali! Il metodo dovrebbe essere chiamato se succede qualcosa. Con la tua soluzione potrei inserire 'return NO' in' - (BOOL) tabBarController: shouldSelectViewController: 'e il controller sarà ancora selezionato. – Kuba

+0

Genio. Molte grazie. – NaXir

Problemi correlati