tutorials que apple ios ipad uitabbarcontroller storyboard uistoryboard

ios - que - ¿Cómo conectar dos iconos diferentes de la barra de pestañas al mismo controlador de vista con el guión gráfico?



que es el storyboard xcode (5)

Creo que es mejor crear dos controladores de vista separados y colocarlos en el Controlador de barra de pestañas individualmente, especialmente si van a cargar datos diferentes. Puede colocar el mismo controlador de vista en un controlador de barra de pestañas varias veces, pero en lo que respecta al diseño y cómo puede manipularlo, no tiene mucho sentido hacerlo de esa manera.

Tengo un controlador de barra de pestañas en una aplicación de iPad con 6 elementos. Dos de los íconos cuando los toquen conducirán al mismo controlador de vista. Este controlador de vista tiene una lista de elementos que se mostrarán, que cambiará levemente según los iconos de la barra de pestañas que toque.

¿Cómo configuro esto con guiones gráficos? Es posible arrastrar la relación dos veces al mismo controlador de vista, pero luego solo muestra dos de los mismos iconos en la barra de pestañas. Quiero que las dos opciones tengan diferentes iconos y nombre.


No creo que puedas hacer lo que intentas hacer con un UITabBarController. Puede agregar dos instancias diferentes de la misma clase de controlador de vista si lo desea. De lo contrario, tendría que agregar una barra de pestañas a un UIViewController regular y escribir su propia lógica para cambiar entre los controladores.


Al igual que ha descubierto, puede diseñar el controlador de vista una vez en el guión gráfico, pero no podrá asociarlo con el controlador de la barra de pestañas más de una vez.

Lo que puede hacer es asignarle un identificador en el inspector de identidad, y luego, en tiempo de ejecución, puede usar el método - [UIStoryboard instantiateViewControllerWithIdentifier:] para instanciar una segunda copia del controlador de vista. Puede insertar esa segunda copia en el controlador de pestañas usando - [UITabBarController setViewControllers: animated:]


Tengo la misma pregunta que la tuya cuando intento implementar una vista de controlador de barra de pestañas con 4 elementos de pestañas, y cada elemento de pestañas reutilizando el mismo controlador de vista, y la lógica personalizada para estos 4 elementos se establece a través de la propiedad cuando la barra de pestañas llamada al controlador viewDidLoad . Déjame mostrarte lo que he hecho, como abajo:

1. Crea un controlador de barra de pestañas con 4 controladores de vista

Abra el guión gráfico y arrastre un Tab Bar Controller desde la biblioteca de objetos. Y arrastre otros 2 view controller más en el guión gráfico también.

Recuerde hacer un enlace entre el controlador de la barra de pestañas y el 2 controlador de vista nuevo.

2. Cree un controlador de vista de reutilización para la vista de 4 pestañas

Cree una nueva clase de toque de cocoa, denominada ViewController , y cree sus propiedades de personalización en la sección @interface. Estas propiedades se establecerán en el método viewDidLoad controlador de la barra de viewDidLoad , por lo que las 4 pestañas utilizarán el mismo controlador de vista, pero las propiedades no son las mismas.

#import <UIKit/UIKit.h> @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> // Define your customisation properties here, so that you can set it in the tab bar controller. @property (assign, nonatomic) UITableViewCellStyle style; @end

4. Cree una subclase del controlador de vista de UITabBarController

Cree una nueva clase Cocoa Touch, denominada UITabViewController , y UITabViewController en la subclase de UITabBarController , y UITabBarControllerDelegate .

Para mi caso, necesito mostrar una vista de tabla con un estilo de 4 celdas diferente en 4 pestañas diferentes, por lo que estableceré la propiedad de style viewController en el controlador de la barra de pestañas para lograr mi objetivo.

UITabViewController.h

#import <UIKit/UIKit.h> @interface UITabViewController : UITabBarController <UITabBarControllerDelegate> @end

UITabViewController.m

#import "UITabViewController.h" @interface UITabViewController () @end @implementation UITabViewController - (void)viewDidLoad { // Make UITabViewController as the delegate of UITabBarController self.delegate = self; [super viewDidLoad]; // Set-Up the UITableCell style for each tab item [self.viewControllers enumerateObjectsUsingBlock:^(id viewController, NSUInteger idx, BOOL *stop){ UITableViewCellStyle style; switch (idx) { case 0: style = UITableViewCellStyleDefault; break; case 1: style = UITableViewCellStyleSubtitle; break; case 2: style = UITableViewCellStyleValue1; break; case 3: style = UITableViewCellStyleValue2; break; default: style = UITableViewCellStyleDefault; break; } SEL selector = @selector(setStyle:); if([viewController respondsToSelector:selector]){ NSInvocation *invk = [NSInvocation invocationWithMethodSignature:[viewController methodSignatureForSelector:selector]]; [invk setSelector:selector]; [invk setTarget:viewController]; [invk setArgument:&style atIndex:2]; [invk invoke]; } }]; }

O bien, si necesita establecer las propiedades de personalización cuando el usuario seleccionó diferentes elementos de pestañas, puede agregar un nuevo método de delegado en la sección UITabViewController @implementation:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ // Check whether the view controller responds to the property setter method SEL selector = @selector(setMyProperty:); if([viewController respondsToSelector:selector]){ // Call the setter method with NSInvocation NSInvocation *invk = [NSInvocation invocationWithMethodSignature:[viewController methodSignatureForSelector:selector]]; [invk setSelector:selector]; [invk setTarget:viewController]; [invk setArgument:&argument atIndex:2]; [invk invoke]; } }


Tuve un problema similar y lo resolví con bastante facilidad.

Crea un TabBarController en el Storyboard.

En cada pestaña asigne un controlador de navegación.

Configure todos los controladores de navegación como Controlador de vista raíz como el controlador de una vista que desea compartir entre ellos.

En View Controller, en ViewDidLoad, cree una condición basada en tabBarController.selectedIndex para personalizar el controlador de vista según la pestaña seleccionada. Algo como esto:

override func viewDidLoad() { super.viewDidLoad() if let selectedTabIndex = tabBarController?.selectedIndex { switch selectedTabIndex: case 0: // Customize ViewController for tab 1 case 1: // Customize ViewController for tab 2 case 2: // Customize ViewController for tab 3 default: break }