2011-03-09 20 views
5

¿Puede alguien decirme cómo puedo determinar en qué índice de tabulador está el controlador de vista?cómo determinar qué índice de la barra de tareas es mi controlador de vista

para simplificar - Puedo saltar a un tabBARItem en este momento codificando su índice.

self.tabBarController.selectedIndex = 3; 

Sin embargo, si el usuario personalizar los elementos de la barra pestaña, hay una posibilidad de que el viewController en el número 3 no es la que el usuario va a querer ya que se ha movido. ¿Cómo puedo determinar dónde se movió para poder seleccionar el correcto?

Cualquier ayuda por favor.

Gracias,

Lee

Respuesta

0

bien, así que no tenía suerte con cualquiera de cualquiera de las respuestas con éxito - pero lo hice tipo tan pensó que yo Explicaría cómo lo hice en caso de que haya alguien más que se atasque intentando hacer lo que hice.

cada tabBarItem en mi controlador de la barra de pestañas se asigna una etiqueta que se inició con 0 y decir terminó con 8. (se puede hacer en IB también)

asegúrese delegado de tabBarController etc está todo listo y inplement la siguiente método delegado:

- (void)tabBarController:(UITabBarController *)theTabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { 

NSInteger count = self.tabBarController.viewControllers.count; 
NSMutableArray *tabOrderArray = [[NSMutableArray alloc] initWithCapacity:count]; 


for (UINavigationController *viewController in viewControllers) 
{ 
    NSInteger tag = viewController.tabBarItem.tag; 
    [tabOrderArray addObject:[NSNumber numberWithInteger:tag]]; 
} 

[prefs setObject:tabOrderArray forKey:@"tabOrder"]; 
[prefs synchronize]; // optional 
[tabOrderArray release]; 

}

(nota i uso navControllers sábana de ViewControllers en mi aplicación, por tanto, que para el lazo)

por lo que ahora lo que yo era capaz de hacer era simplemente hacer una verificación de si había una matriz en Preferencias con un nuevo orden barra de pestañas

NSArray * tabBarOrder = [prefs objectForKey:@"tabOrder"]; 


if(tabBarOrder) { ... } 

si había una orden barra de pestañas podría conseguir índice de la VC que quería con '[tabBarOrder indexOfObjectIdenticalTo: [NSNumber numberWithInt: theViewsTagImAfter]];

y si no había ninguna matriz en las preferencias, puede asumir con seguridad que no se ha movido y está donde está.

**

Cualquiera siente libre para destruir la forma en que he hecho esto debe sentir que podría haber logrado esto de una manera más elegante. sin embargo, esto funciona y las otras sugerencias no.

15

utilizar la propiedad self.tabBarController.selectedViewController.

ACTUALIZACIÓN: Para obtener el índice de un viewController específica, utilice:

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController]; 
+0

No lo siento, ha entendido mal o mi pregunta es engañosa - no estoy buscando el índice actual en el que estoy, estoy mirando saltar a un controlador de vista en particular en cuanto a que (en este momento) no tengo idea de qué índice esto está en debería ser cambiado. ¿Alguno más claro? Gracias y lo siento – theiOSDude

+0

La propiedad 'selectedViewController' no devuelve un índice sino una instancia' UIViewController'. Tal vez todavía no entiendo lo que estás buscando ... –

+0

Lo siento, a la derecha, lo que sugieres es genial, me permite seleccionar un controlador de vista para que esté ordenado, sin embargo, debo seleccionar el tabBarItem correspondiente, por lo tanto, necesitaba el índice ... – theiOSDude

1

Puede obtener la lista de controladores en el UITabBar y comparar por valor de puntero. Por ejemplo, un controlador de vista que está en un UITabBar puede averiguar su ubicación como esto:

int loc = 0; 
for (UIViewController *vc in [self.tabBarController viewControllers]){ 
    if (vc == self.navigationController || vc == self){ 
     break; 
    } 
    loc++; 
} 
if (loc == [[self.tabBarController viewControllers] count]) 
    NSLog(@"Could not find me!"); 
else 
    NSLog(@"Im in tab:% d",loc); 
Cuestiones relacionadas