puedo - como ver historial en iphone 6
Eliminar el elemento del botón de la barra derecha del elemento de navegación (10)
Swift 3/4:
if let nav = self.navigationController {
nav.navigationItem.setRightBarButtonItems(nil, animated: true)
nav.navigationBar.topItem?.rightBarButtonItems = []
}
He agregado un elemento del botón de la barra derecha en mi elemento de navegación y quiero eliminar esto en alguna condición. Esto es lo que estoy haciendo:
self.navigationItem.rightBarButtonItem = nil;
Pero no consiguiendo el comportamiento deseado.
Quiero ocultarlo pero no encuentro ningún método para ello.
Conozco tres maneras: (Suposiendo en el lado derecho)
Si tienes más de un botón de barra:
self.navigationItem.rightBarButtonItems = nil
más si tienes un solo botón de barra
self.navigationItem.rightBarButtonItem = nil
establecer un botón nulo:
self.navigationItem.setRightBarButtonItem(nil, animated: false)
He tenido este problema al agregar una barra de navegación a un controlador de vista que no está realmente incrustado en un controlador de navegación. En ese caso, el self.navigationItem no es el objeto correcto para sostener los botones de la barra. Lo que encontré funciona (aunque probablemente debería incrustar el controlador de visualización en un controlador de navegación) es crear una propiedad para la barra de navegación que agregó en Interface Builder y vincularlo de la forma habitual. En este caso lo he llamado "navBar".
Luego, debe obtener el elemento de navegación de la barra de navegación en lugar del elemento de navegación de la vista. En cuyo caso este código parece funcionar:
UINavigationItem *item = [self.navBar.items objectAtIndex:0];
item.rightBarButtonItem = nil;
Lo que estás haciendo debería funcionar. Lo he hecho muchas veces. ¿Está seguro de que está eliminando el botón del elemento de navegación correcto? ¿Es el UIViewController
actualmente mostrado?
Lo resolví creando un nuevo rightBarButtonItem.
Crear propiedad:
@property (nonatomic, strong) UIBarButtonItem *clearRightButtonItem;
Sintetizar:
@synthesize clearRightButtonItem = _clearRightButtonItem;
Crear getter:
- (UIBarButtonItem *) clearRightButtonItem {
if (_clearRightButtonItem == nil) {
UIButton *rightButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 38, 38)];
[rightButton setImage:nil forState:UIControlStateNormal];
_clearRightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
}
return _clearRightButtonItem;
}
Y luego establezca rightBarButtonItem con el nuevo clearRightButtonItem:
self.rightButtonItem = self.clearRightButtonItem;
Me funcionó con el siguiente código:
self.navigationItem?.rightBarButtonItem = nil
navigationBar.items = [self.navigationItem!]
Mi respuesta no se refiere específicamente a esta pregunta, pero como este es el principal resultado en Google, contribuiré con mi experiencia con el problema.
Había utilizado una serie de elementos para rightBarButtonItem, por lo tanto de alguna manera usando
self.navigationItem.rightBarButtonItem = nil;
no estaba funcionando para mí, así que hice un artículo de botón vacío y lo puse como rightBarButtonItem usando
[self.navigationItem setRightBarButtonItems:@[self.clearRightButtonItem]];
y ahora se ha ido.
Para otros: también lo intenté.
self.navigationItem.rightBarButtonItem = nil;
y no funcionó, luego noté que no lo llamé desde el hilo principal .
Recientemente enfrenté el mismo problema y lo resolví (gracias a Erik B., su respuesta me inspiró. Desafortunadamente, no puedo votar su respuesta todavía)
Creo que el botón de mi barra derecha no puede desaparecer porque lo llamé en la función viewWillAppear
, y en esa función, self
no se refiere al UIViewController
actual.
Esto me funcionó, en lugar de configurar el botón en viewWillAppear
, lo puse en navigationController:willShowViewController:animated:
function en el UIViewController
anterior .
Por ejemplo, llamo a SecondViewController
desde FirstViewController
y quiero ocultar el botón de la barra derecha en SecondViewController
, pon esto en FirstViewController.m
:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController isKindOfClass:[SecondViewController class]]) {
[viewController.navigationItem setRightBarButtonItem:nil];
}
}
Swift 3 : tengo un par de botones en el lado izquierdo y derecho de la barra de navegación, así que los oculto usando:
func hideNavItems() {
navigationItem.setLeftBarButtonItems(nil, animated: true)
navigationItem.setRightBarButtonItems(nil, animated: true)
}
En mi caso, necesito mostrar esos botones nuevamente en un punto posterior, así que los mantengo en una matriz:
var leftNavItems: [UIBarButtonItem]!
var rightNavItems: [UIBarButtonItem]!
y luego simplemente llamo a una función para mostrar (re-agregar):
func showNavItems() {
navigationItem.setLeftBarButtonItems(leftNavItems, animated: true)
navigationItem.setRightBarButtonItems(rightNavItems, animated: true)
}