bar iphone uinavigationcontroller

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