didSelectViewController no recibió una llamada cuando estaba en la sección "Más"

Tengo un UITabBarController y he configurado su método de delegado didSelectViewController , ya que estoy interesado en el índice de la pestaña que se está seleccionando.

Sin embargo, noté que el método didSelectViewController no se llama cuando el usuario está en la sección "Más" (cuando hay más tabs de las que se pueden mostrar en la barra de tabs):

La sección problemática

¿Hay alguna forma de que me notifiquen los elementos que el usuario selecciona de la tabla que se crea automáticamente?

Encontré lo que necesitaba en esta pregunta .

Básicamente, configuró un UITabBarControllerDelegate y un UINavigationControllerDelegate para el controller de navigation que se muestra dentro de la pestaña Más. Después de eso, detecta si el usuario tocó una de las tabs visibles o la pestaña "Más".

EDITAR

Además, para manipular directamente la tabla que está visible dentro del controller de navigation "Más", puede configurar un delegado de vista de tabla "man-in-the-middle", que intercepta las llamadas al delegado original. Vea el código desde inside didSelectViewController continuación:

 if (viewController == tabBarController.moreNavigationController && tabBarController.moreNavigationController.delegate == nil) { // here we replace the "More" tab table delegate with our own implementation // this allows us to replace viewControllers seamlessly UITableView *view = (UITableView *)self.tabBarController.moreNavigationController.topViewController.view; self.originalDelegate = view.delegate; view.delegate = self; } 

Después de eso, puedes hacer lo que quieras dentro de los methods de delegado, siempre que llames a los mismos methods en el otro delegado (en realidad comprobé a qué methods responde el delegado original y el único método de delegado que se implementa es el didSelectRow:forIndexPath: . Vea un ejemplo a continuación:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // this is the delegate for the "More" tab table // it intercepts any touches and replaces the selected view controller if needed // then, it calls the original delegate to preserve the behavior of the "More" tab // do whatever here // and call the original delegate afterwards [self.originalDelegate tableView: tableView didSelectRowAtIndexPath: indexPath]; }