barra de tabs, click delegado

Tengo dos controlleres de vista (FirstViewController y SecondViewController) y un controller de barra de tabs y estoy usando Storyboards. En el usuario FirstViewController puede drag and drop una vista de image. Así que cada vez que un usuario hace clic en el segundo TabBarItem que muestra SecondViewController, me gustaría comprobar si el usuario ha dejado caer la image o no cada vez que hace clic en TabBarItem.

Entonces entiendo que esto se puede hacer con UITabBarDelegate y con su método -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item . Pero estoy haciendo algo mal porque no se llama al método y creo que esto es porque no puedo configurar el delegado correctamente. Entonces quiero que SecondViewController sea el delegado de TabBarController.

Entonces en mi SecondViewController.h tengo lo siguiente

 @interface SecondViewController : UIViewController<UITabBarDelegate> 

Y en SecondViewController.m tengo

 -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { NSLog(@"%@", item); } - (void)viewDidLoad { [super viewDidLoad]; self.tabBarController.delegate = self; } 

Pero no sucede nada y al configurar el delegado también recibo una advertencia del comstackdor: Asignar a 'id' desde el tipo incompatible 'SecondViewController * const __strong'

Por favor sea amable conmigo, esta es mi primera aplicación y la primera vez que bash usar delegates.

Agregue el siguiente código a cualquiera de los controlleres de vista

 UITabBarController *tabBarController = (UITabBarController*)[UIApplication shanetworkingApplication].keyWindow.rootViewController ; [tabBarController setDelegate:self]; 

// agregue los methods de delegates a su class

 -(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { NSLog(@"%@", tabBarController); } 
  -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item; 

Este método es un método delegado para UITabBar, no UITabBarController, por lo que

  self.tabBarController.delegate = self; 

no trabajará.

El controller de barra de tabs tiene su propio UITabBar, pero no se permite cambiar el delegado de una barra de tabs administrada por un controller de barra de tabs, así que simplemente intente el método UITabBarControllerDelegate de esta manera:

 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController NSLog(@"%@", item); } 

Para get más información, verifique los detalles.

Gracias

Importé e implementé lo siguiente. Espero eso ayude.

 - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { if (_mainTab.selectedItem.tag == 1) { NSLog(@"TAB 1"); } else if (_mainTab.selectedItem.tag == 2) { NSLog(@"TAB2"); } else if (_mainTab.selectedItem.tag == 3) { NSLog(@"TAB3"); } else { NSLog(@"TAB NOT WORKING"); } } 

Está utilizando el protocolo delegado incorrecto. UITabBarDelegate se usa generalmente para personalizar los objects UITabBar . UITabBarControllerDelegate utilizar el protocolo UITabBarControllerDelegate para verificar si se selecciona una pestaña o para personalizar el comportamiento de las tabs.

En su lugar, debería implementar el protocolo UITabBarControllerDelegate y utilizar esta callback de los delegates para realizar el seguimiento de la selección:

 tabBarController:didSelectViewController: 

Lo siguiente es que debe inicializar el delegado antes de que se le llame. Se llamará a ViewDidLoad después de que tabbarcontroller intentará hablar para delegar.

Para deshacerse de la advertencia del comstackdor, su SecondViewController debe cumplir con el protocolo UITabBarControllerDelegate lugar del protocolo UITabBarDelegate .

 @interface SecondViewController : UIViewController<UITabBarControllerDelegate>