2009-08-04 25 views
14

He agregado un elemento BarButton a la izquierda del nav.bar a través de Interface Builder y en el código quiero que esto solo se muestre en el modo de edición de mi vista de tabla. Pero no encontré ninguna propiedad oculta para configurar el leftBarButtonItem (como: self.navigationItem.leftBarButtonItem.hidden = YES).Ocultando el botón de barra de UINavigationItem

Solo puedo configurar la propiedad enabled. Alguien sabe cómo controlar el ocultar y mostrar la propiedad del leftBarButtonItem, por favor ayuda.

Respuesta

7

Estoy bastante seguro de que la única forma de "ocultarlo" es eliminarlo.

self.navigationItem.leftBarButtonItem = nil; 

Aunque no es una respuesta perfecta a su pregunta, ya que, básicamente, se deshace de su botón en lugar de ocultarlo. Tendrás que volver a crearlo o mantener el botón original y simplemente volver a configurar leftBarButtonItem en tu UIBarButtonItem.

+0

Gracias por su respuesta. También estaba pensando en un enfoque así si realmente no puedo esconderme. – Sreehari

2

No hay nada en la documentación que sugiera que los artículos de la barra tengan una propiedad oculta.

Por qué no establecer

self.navigationItem.leftBarButtonItem = nil; 

cuando el usuario no está editando, a continuación, establecer

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

cuando el usuario está editando? Esto requiere volver a crear el botón cada vez o almacenarlo durante el ciclo de vida de la vista. Ninguno de los dos es terriblemente doloroso, pero no es tan fácil como una propiedad oculta.

+0

Neil me ganó, exactamente. –

55

Esto funciona lo probé a mí mismo

self.navigationItem.leftBarButtonItem = nil; 
self.navigationItem.hidesBackButton = YES;  
+3

En algunos casos establecerlo en cero no funcionó para mí, ¡pero funcionó hidesBackButton en SÍ! Gracias. –

+1

La configuración de nil permitirá a navigationItem seguir su comportamiento predeterminado, que es mostrar un botón de retroceso si está en una subvista de un controlador de navegación, por eso también necesita establecer hidesBackButton en true si no desea que se muestre nada Alguna vez – Nycen

+1

Me parece que esto no funciona en el momento 'viewDidLoad', pero funciona en' viewWillAppear: 'time. – ThomasW

1

Puede utilizar

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

ya que no hay otra manera de ocultarlo. así que deshabilítelo.

3

acabo de crear mi propio "ocultar" mostrar la función a continuación:

- (void)hideClearButton:(BOOL)hide { 

    if (hide) { 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
    else { 
     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
               initWithTitle:NSLocalizedString(@"Clear", @"Recents") 
               style:UIBarButtonItemStylePlain 
               target:self action:@selector(clearAll:)]; 

    } 
} 

simplemente puede llamar así:

[self hideClearButton:YES]; //hide it 

o

[self hideClearButton:NO]; //show it 
1

Para ocultar/desactivar

[self.navigationItem.leftBarButtonItem setEnabled:FALSE]; 

Para mostrar/activar

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 
+0

Correcto, pero verdadero y falso también funciona como el encanto! – pkc456

+1

Bastante lo hacen. Solo piense en apegarse a la sintaxis Object-C que ayuda a la legibilidad. En este caso, es irrelevante, supongo. – Tander

4

Puede utilizar

// Hide 
self.navigationItem.leftBarButtonItem = nil; 

// Show 
self.navigationItem.leftBarButtonItem = self.myBarButtonItem 

La clave es asegurarse de que tiene una fuerte referencia al elemento botón antes nilling leftBarButtonItem.

@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem; 
0

Bueno, hacerlo nil no era una opción porque quería volver a mostrarlo y no quería volver a crear un botón.

Así que lo que hice fue

UIBarButtonItem *barButton = (UIBarButtonItem *)self.navBar.topItem.leftBarButtonItem; 
barButton.customView.hidden = true;//Hide 
barButton.customView.hidden = false;//Show 

funciona para mí. (mi leftBarButtonItem fue creado usando customView)

Espero que ayude.

0

Este trabajo solución para mí

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)]; 
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView]; 
self.navigationItem.leftBarButtonItem = btnL; 
0

que tiene una función fácil de hacer esto. Tengo una navegación como esta. Navigation Bar Viene de Interface Builder, tiene una imagen de fondo.

@IBOutlet weak var memberBtn: UIBarButtonItem! 

puede ocultar/mostrar por:

func hideMemberBtn() { 
    memberBtn.isEnabled = false 
    memberBtn.tintColor = UIColor.clear 
} 
func showMemberBtn() { 
    memberBtn.isEnabled = true 
    memberBtn.tintColor = UIColor.white 
} 

Es fácil, pero funciona para mí. Puedes cambiar tintColor como necesites. Esperanza de ayuda:]

Cuestiones relacionadas