iphone - bar - ¿Cómo ocultar el botón "Atrás" en UINavigationController?
uinavigationbar ios (14)
¿Sabes cómo ocultar el botón "volver" en un UINavigationController? Además, cómo mostrarlo de nuevo, pero supongo que es muy similar a esconderlo ...
Al igual que la aplicación de correo hace en el iPhone cuando presiona ''Editar'' mientras mira los correos electrónicos.
Añadir este código
[self.navigationItem setHidesBackButton:YES];
Acabo de descubrir la respuesta, en un controlador usa esto:
[self.navigationItem setHidesBackButton:YES animated:YES];
Y para restaurarlo:
[self.navigationItem setHidesBackButton:NO animated:YES];
Además de quitar el botón Atrás (utilizando los métodos ya recomendados), no olvides que el usuario aún puede "mostrar" en la pantalla anterior con un gesto de deslizar de izquierda a derecha en iOS 7 y posterior.
Para desactivar eso (cuando sea apropiado), implemente lo siguiente (en viewDidLoad por ejemplo):
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
En mi caso, tuve algunos problemas con las respuestas actuales:
- dentro del ícono viewDidLoad / viewWillAppear only back estaba oculto y la cadena "Atrás" estaba inactiva pero aún visible
- inside viewDidAppear desapareció el botón Atrás ... pero no quería que el usuario lo viera en absoluto
Entonces la solución que finalmente me ha funcionado es:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self.navigationItem setHidesBackButton:YES animated:NO];
}
return self;
}
En mi subclase UIViewController tengo este método:
-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated: animated];
// hide back button in edit mode
[self.navigationItem setHidesBackButton:editing animated:YES];
}
Esto oculta el botón Atrás
let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backBtn
Esto oculta el botón Atrás y lo reemplaza con un botón para agregar en Swift:
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
// This hides the back button while in editing mode, which makes room for an add item button
self.navigationItem.setHidesBackButton(editing, animated: animated)
if editing {
// This adds the add item button
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
// Use the animated setter for the left button so that add button fades in while the back button fades out
self.navigationItem.setLeftBarButton(addButton, animated: animated)
self.enableBackGesture(enabled: false)
} else {
// This removes the add item button
self.navigationItem.setLeftBarButton(nil, animated: animated)
self.enableBackGesture(enabled: true)
}
}
func enableBackGesture(enabled: Bool) {
// In addition to removing the back button and adding the add item button while in edit mode, the user can still exit to the previous screen with a left-to-right swipe gesture in iOS 7 and later. This code disables this action while in edit mode.
if let navigationController = self.navigationController {
if let interactivePopGestureRecognizer = navigationController.interactivePopGestureRecognizer {
interactivePopGestureRecognizer.isEnabled = enabled
}
}
}
La solución sugerida por Zoran Simic no funcionó para mí por alguna razón.
Sin embargo, este código funcionó:
MyController* controller = [[MyController alloc] init];
NSArray* array = [[[NSArray alloc] initWithObjects:controller, nil] autorelease];
[self.navigationController setViewControllers:array animated:NO];
[controller release];
Obviamente, tendrías que manipular un NSArray a tu gusto para que funcione para ti. Espero que ayude a alguien :)
Para ocultar y mostrar el botón Atrás de forma condicional, puede usar el siguiente código:
-(void)viewDidAppear:(BOOL)animated
{
if ([tempAry count]==0)
{
[self.navigationItem setHidesBackButton:YES animated:YES];
}
else
{
[self.navigationItem setHidesBackButton:NO animated:YES];
}
[super viewDidAppear:animated];
}
Nota: en algunos casos, debe ponerlo en el método viewDidAppear en lugar de viewWillAppear, por ejemplo, cuando está actualizando el array de la clase siguiente a la clase anterior y luego verificando la condición en la siguiente clase como se indicó anteriormente.
Sethidesbackbutton no funcionó para mí por alguna razón
Lo usé de esta manera ->
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
Solo para aclarar las respuestas existentes: la propiedad hidesBackButton
es la respuesta correcta, pero no está claro en muchas respuestas a qué self
refiere self
. Básicamente debe establecer self.navigationItem.hidesBackButton = YES
en el controlador de vista que está a punto de ser empujado (o simplemente empujado) al UINavigationController
.
En otras palabras, di que tengo un UINavigationController
llamado myNavController
. Quiero ponerle una nueva vista, y cuando lo haga no quiero que el botón Atrás se muestre más. Podría hacer algo como:
UIViewController *newVC = [[UIViewController alloc] init];
//presumably would do some stuff here to set up the new view controller
newVC.navigationItem.hidesBackButton = YES;
[myNavController pushViewController:newVC animated:YES];
Cuando el código finalice, la vista controlada por newVC
ahora debería mostrarse, y no debería verse ningún botón de retroceso.
Swift 3.
En general, debe usar la API de ViewController de Apple como se describe muchas veces en esta página, pero a veces necesita el control inmediato del botón Atrás.
El siguiente código oculta el botón Atrás y garantiza que la detección de colisión de tap no se produzca en la región de botón oculto.
let emptyView = UIView(frame: .zero)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView)
Swift iOS (lo he usado a continuación)
// hide back button
self.navigationItem.setHidesBackButton(true, animated: false)
// pgrm mark ----- ------
// hide the back button for this view controller
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
self.navigationItem.setHidesBackButton(editing, animated: animated)
}// end setEditing
Utilice siempre la documentación de Apple para problemas simples; son más directos y livianos :)
Aquí está la sintaxis para Swift 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)
Referencia