2010-05-26 14 views
6

Estoy tratando de seleccionar ninguna pestaña en mi aplicación. Al principio, se selecciona la primera pestaña, pero me gustaría deseleccionarla para que no se seleccionen pestañas.Seleccionar sin pestañas en una UITabBar

No me preguntes por qué, es así como el cliente lo quiere! jeje

Gracias por su ayuda!

PD: Ya he probado:

// rootController = UITabBarController  
rootController.tabBar.selectedItem = 0; 
rootController.tabBar.selectedItem = nil; 
[rootController setSelectedIndex:[rootController.items objectAtIndex:0]]; 
[rootController setSelectedIndex:nil]; 
[rootController setSelectedIndex:0]; 
// That one works : (but I can't select 0 or -1 for instance) 
[rootController setSelectedIndex:2]; 

¿Alguna idea? ¡Gracias de nuevo!

+0

¿Ha encontrado alguna solución a este problema? También estoy encontrando una solución a este problema, avíseme si encontró la solución. –

Respuesta

0

Desde el documentation:

Este controlador de vista es el que tiene vista personalizada aparece en ese momento por la interfaz de la barra de pestañas. El controlador de vista especificado debe estar en la matriz viewControllers. La asignación de un nuevo controlador de vista a esta propiedad cambia la vista que se muestra actualmente y también selecciona una pestaña apropiada en la barra de pestañas. Cambiar el controlador de vista también actualiza la propiedad selectedIndex en consecuencia. El valor predeterminado de esta propiedad es nulo.

Entonces, supongo que necesita [rootController setSelectedViewController: nil];.

Actualización:

Para aclarar un poco,

[self.tabBarController setSelectedViewController:nil];

También hay documentación sobre preventing the selection of tabs que puedan ser de utilidad.

+0

Como dije en el código de mi pregunta: No funciona, se bloquea por este motivo: 2010-05-26 12: 35: 22.091 PremierSoins [8449: 207] *** - [UITabBarController selectedViewController:]: selector no reconocido enviado a la instancia 0x4b43fb0 2010-05-26 12: 35: 22.093 PremierSoins [8449: 207] *** Aplicación de finalización debido a la excepción no detectada 'NSInvalidArgumentException', razón: '*** - [UITabBarController selectedViewController:]: no reconocido Selector enviado a la instancia 0x4b43fb0 ' – TomShreds

+0

El código en su pregunta en ningún momento menciona 'selectedViewController:'. 'setSelectedIndex:' no es lo mismo. –

+0

También necesitaría llamar '-setSelectedViewController:', no solo '-selectedViewController:' ... –

7

Puede anular la selección de todos los elementos de la barra de pestañas si está utilizando la instancia de UITabBar sin UITabBarController uno.

En tal caso, el código siguiente funciona bien.

[tabBar setSelectedItem:nil]; 

Si UITabBar es una parte de UITabBarController entonces la aplicación se bloquea con una excepción:

'Modificar directamente una barra de pestañas gestionado por un controlador barra de pestañas no es permitido.'

En otras palabras, si desea que esto funcione, debe gestionar las rutinas de tabbar manualmente sin controlador.

+0

wow esto es un verdadero truco – code4j

1

fin he conseguido hacerlo utilizando el siguiente código:

 DefaultView *defaultView = [[DefaultView alloc]initWithNibName:@"DefaultView" bundle:[NSBundle mainBundle]]; 
     [self.tabBarController setSelectedViewController:nil]; 
     [self.tabBarController setSelectedViewController:defaultView]; 

Tenga en cuenta que sólo haciendo [self.tabBarController setSelectedViewController:nil]; no hará nada. Usted TIENEN QUE especificar un controlador de vista. Esta vista Controlador se mostrará sin el icono de barra de herramientas seleccionada. Al seleccionar las otras opciones de TabBar, desaparecerá la vista predeterminada y se cargará la vista requerida.

+2

Esto solía funcionar pero está roto desde iOS 5.0. En la tercera línea de código, aparecerá el siguiente error: 'solo se puede seleccionar un controlador de vista en la lista de controladores de vista de la barra de pestañas. – scalbatty

+1

No funciona para mí. –

2

me encontré con esta pregunta y en realidad es muy simple:

tabBarController.selectedViewController = viewController; 

Esto es algo similar a la respuesta de HG, pero la configuración del controlador de vista seleccionada a cero no es necesaria.

0

¿Hay mejores métodos?

use [self.tabBarController setSelectedViewController:nil], 
Warning : "-[UITabBarController setSelectedViewController:] only a view controller in the tab bar controller's list of view controllers can be selected." 
0

creo rootController.tabBar.selectedItem = 0;

que está mal lo que han intentado. Porque cuando está configurando selectedItem=0, entonces seguro que tomará el primer tabBarItem de tabBarController.

1

Es mejor cambiar la imagen seleccionada cuando lo desee & hacer una vista ocultar o mostrar de acuerdo a sus necesidades. Aquí mi pieza de código que podría ayudar a comprender:

-(void)viewWillAppear:(BOOL)animated{ 
    if ([[NSUserDefaults standardUserDefaults]integerForKey:@"flagAsk"]) { 
     UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0]; 
     firstTab.selectedImage = [[UIImage imageNamed:@"Ask2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; 
       vieToHide.hidden=YES; 
    } 
    else{ 
     UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0]; 
     firstTab.selectedImage = [[UIImage imageNamed:@"Ask"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; 
     vieToHide.hidden=NO; 
    } 
} 
Cuestiones relacionadas