Establezca UITabBarController creado en Interface Builder como delegado

Creé mi aplicación de iOS con la plantilla Barra de tabs, así que aquí está UITabBarController con botones de barra. Un problema es cómo configurarlo como delegado. Encontré en SO que tiene que configurarse programáticamente en AppDelegate, pero creo que es imposible, porque no tengo acceso a Tab Bar Controller como salida.

@interface el valor apropiado a @interface (tanto ViewController como AppDelegate), pero no sé qué hacer a continuación.

 @interface ViewController : UIViewController <UITabBarControllerDelegate> 

Espero no tener que deshacerme de toda la plantilla de la aplicación y es posible configurar el controller de barra de tabs creado en IB para ser delegado.

Exactamente quiero que se delegue para crear en la pestaña el evento selecto como este:

 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

¿Alguna idea?

No recuerdo exactamente la plantilla de barra de tabs de Xcode configurada, pero en su AppDelegate puede acceder al rootViewController su window, rootViewController a un UITabBarController y luego establecer su delegado en su AppDelegate o en cualquier otro controller de vista.

Algo como esto:

 UITabBarController *tabBarController = (UITabBarController *)[[self window] rootViewController]; [tabBarController setDelegate:self]; // In this example your app delegate would implement the UITabBarControllerDelegate protocol. 

EDITAR

Si desea configurar su instancia ViewController como delegado:

 UITabBarController *tabBarController = (UITabBarController *)[[self window] rootViewController]; // I assume you have your ViewController instance set as the first view controller of your tab bar controller // No need for a cast here since objectAtIndex: returns id, but of course you must implement the UITabBarController protocol in your ViewController. [tabBarController setDelegate:[[tabBarController viewControllers] objectAtIndex:0]]]; 

EDIT 2 Desde su ViewController puede configurar el delegado del controller de barra de tabs como rdelmar comentarios. Solo tenga en count que esto no se puede hacer en el método init porque el controller de vista no está en el controller de la barra de tabs todavía. El lugar apropiado sería viewDidLoad pero, por lo tanto, no se ejecutará hasta que la vista ViewController se cargue …

 self.tabBarController.delegate = self; 

Puede crear rápida y fácilmente una nueva class de delegado TabBarController y conectarlo como delegado en el guión gráfico.

  1. Crear una nueva class:

    class TabBarControllerDelegate: NSObject, UITabBarControllerDelegate {

  2. En IB, agregue un object de la biblioteca de objects a la list de Ver controller a la izquierda (nota: busque "object", es un cubo amarillo).

  3. Cambia la class de este object (tu cubo amarillo en IB) a TabBarControllerDelegate

  4. En IB, navegue hasta la escena del Controlador de barra de tabs. Desde el Inspector de connection, arrastre el círculo delegado al nuevo object que agregó en el Paso 3.

  5. Implementa tus methods delegates en tu class TabBarControllerDelegate. ¡Hecho!

     func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController)->Bool { println("Selected a new tab") 

    }

¿Qué hay de crear un viewController decir subclass UITabBarController

 @interface MyTabController : UITabBarController<UITabBarControllerDelegate> 

y establezca la class de controller de la pestaña en su storyboard en MyTabController lugar de UITabBarController , luego ponga self.delegate = self; en tu viewDidLoad

implementar:

 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

y aquí estás.

Editar:

Si encuentra self.delegate = self; es extraño, que es, puede crear una salida en su MyTabController

 IBOutlet UITabBarController *tabBarController; and connect it to the tab controller in your storyboard. 

Entonces puedes poner tabBarController.delegate = self;

0 líneas de código

Arrastre un object y subclare

Objeto IB

  1. Xcode> Mostrar Inspector de files> Clase personalizada.
  2. Clase : TabBarControllerDelegate .

Establezca delegado en ese object

Enlace a objeto en IB


Pon tu código existente en ese object

Este es el código que ya tiene en su UITabBarControllerDelegate actual.

 class TabBarControllerDelegate: NSObject, UITabBarControllerDelegate { // Delegate code goes here }