2011-09-17 10 views
6

Actualmente, estoy tratando de desencadenar el método 'didSelectViewController' mediante programación a través del siguiente código:Cómo activar el método "tabBarController: didSelectViewController:" programmatically?

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

Sin embargo, el método de la 'didSelectViewController' no fue llamado. ¿Cómo puedo activar el método sin tener que seleccionar manualmente la barra de pestañas?

+1

N. B. el comportamiento de 'tabBarController: didSelectViewController:' cambió con iOS 3. En las versiones anteriores a 3, se solicitó este método tanto para los cambios programáticos como para los iniciados por el usuario en el controlador de vista seleccionado. En iOS 3 y superior, se llama solo en respuesta a los toques de usuario en la barra de pestañas y no se invoca cuando el código cambia el contenido de la barra de pestañas de forma programática. – albertamg

+0

Me pregunto por qué quieres lograr esto. – Raptor

Respuesta

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

Esto funcionó. ¡Probé! – user523234

+0

sí, también funciona para mí. ¿Pero por qué tienes que hacer eso? En mi caso, UITabbarControllerDelegate es una clase separada, NSObject, e implementa los métodos de delegado. El problema es que si cambio la pestaña programáticamente, no se invocan los métodos de delegado. Si cambias haciendo clic en las pestañas, funciona. Todavía no pude entender por qué sucede. – Zsolt

+0

@ Zsolt así es como el delegado fue pensado por Apple (desencadenado por la interacción del usuario), y tiene sentido de alguna manera. Cuando se cambia programáticamente, ya sabe que cambió, por lo que no tiene sentido desencadenar el delegado en algunas situaciones. –

0

para SWIFT 3.0 programación puede llamar al método delegado barra de pestañas como esto

self.tabController.selectedIndex = index (e.g. 0,1...etc) 
self.tabController.delegate.tabBarController(self.tabController, didSelectViewController: self.tabController.viewControllers[index]) 
Cuestiones relacionadas