ios - bar - root view controller navigation controller
¿Cómo cambiar el nombre del botón Atrás del UINavigationController? (16)
Tengo un UIViewController
y estoy navegando desde mi primer controlador de vista a segundo controlador de vista y quiero cambiar el nombre del botón que se muestra en el controlador de navigationcontroller
para volver atrás ....
SecondViewController *secondController = [[SecondViewController alloc]
initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:secondController animated:YES];
ahora en el segundo viewcontroller
quiero cambiar el nombre del botón en el navigationController
.
En Swift encontré la solución muy simple,
Supongamos que estoy en ViewControllerA y voy a ViewControllerB, si deseo cambiar el nombre del botón de retroceso que se muestra en ViewControllerB, lo haré en ViewControllerA,
self.title = "BackButtonTitle"
Eso es.
En mi caso, solo funcionaba ejecutando el código en el hilo principal, así:
dispatch_async(dispatch_get_main_queue(), ^(void) {
self.navigationController.navigationBar.backItem.title = @"Custom Title";
});
En realidad puedes cambiar el título del botón Atrás
self.navigationItem.backBarButtonItem.title = @"NewName";
En viewWillAppear escribe esto
self.navigationItem.title = @"List View";
Y en ViewWilldisapper escribe esto
self.navigationItem.title = @"Back";
Funciona sin story boards.
Es muy importante que, en vista, la opción del controlador "Métricas simuladas" no esté seleccionada como "Inferida".
¡Intenté con "Ninguno" y todo está bien!
Hay dos maneras de hacer esto.
La primera forma es por código de programa:
La respuesta de Yakimenko Aleksey es la manera más simple. Esto realmente funciona (probado en Xcode 8 + iOS 10)
Swift3:
self.navigationItem.backBarButtonItem?.title = "Your customized back title"
Nota: debe llamar al código anterior en el controlador de vista de origen, no al controlador de vista de destino.
La segunda forma es usar la localización del guión gráfico a través del archivo Main.strings
,
"nnnnnnn.title" = "localized string";
El nnnnnnn significa el Id. De objeto del BackBarButtonItem en el controlador de vista de origen (¡no en el controlador de vista de destino!)
Necesita establecer la propiedad "Atrás" del elemento de la barra de navegación, creará automáticamente un BarButtonItem, encontrará su id de objeto.
Lo sentimos, no pude cargar capturas de pantalla.
Hay una manera fácil de hacerlo en Interface Builder o Storyboarding. En el Controlador de vista principal, simplemente configure el atributo "Atrás" del elemento de navegación para cualquier título que desee. Aquí hay un ejemplo:
Villian''s Tavern View tendrá "Atrás" como Título del Botón Atrás, como lo que acabamos de configurar en el inspector de atributos del controlador de navegación del padre (Mejores Barras).
Pruebe de esta manera: -
NSArray *viewControllerArr = [self.navigationController viewControllers];
// get index of the previous ViewContoller
long previousViewControllerIndex = [viewControllerArr indexOfObject:self] - 1;
UIViewController *previous;
if (previousViewControllerIndex >= 0) {
previous = [viewControllerArr objectAtIndex:previousViewControllerIndex];
previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:nil];
}
Pruebe el código siguiente:
[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];
Puedes lograr esto usando titleView
of navigationItem
Swift 3 respuesta
• Cree una extensión para UINavigationItem
como a continuación
extension UINavigationItem {
func customTitle(title: String) {
let titleLabel = UILabel()
titleLabel.text = title
titleLabel.textColor = UIColor.white
titleLabel.textAlignment = .center
titleLabel.sizeToFit()
titleView = titleLabel
}
}
• En sus controladores viewDidLoad
haga lo siguiente
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
title = "Text For Back Button"
navigationItem.customTitle(title: "Title for your view controller")
}
Si desea hacer esto programáticamente, puede hacerlo así:
C objetivo
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
Rápido
let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem
Sin embargo, si prefiere utilizar Interface Builder, simplemente seleccione el UINavigationItem para el que desea establecer el botón Atrás, y navegue hasta el inspector de atributos para cambiar el título del botón Atrás.
NOTA: es importante recordar que debe configurar esto en el controlador de vista al que volvería al tocar el botón Atrás, no el controlador de vista actualmente visible.
Si usa referencias a Storyboard, es posible que View Controller no muestre el elemento de navegación en Interface Builder.
El arrastre manual de una barra de navegación no funcionará, debe arrastrar un elemento de navegación
Luego podrá establecer el título de su botón Atrás. Aquí también es donde establecerá el título de la vista.
Citando a Mick MacCallum:
NOTA: es importante recordar que debe configurar esto en el controlador de vista al que volvería al tocar el botón Atrás, no el controlador de vista actualmente visible.
Si usas Storyboard, hay una manera fácil de hacerlo (funcionó bien para mí).
- Ve a tu guión gráfico
- Seleccione qué UIViewController desea cambiar el texto del botón Atrás.
- Haga clic en el UINavigationItem en la parte superior de su UIViewController. (el que tiene el título)
- En el panel de la derecha, selecciona el inspector de atributos (el 4º icono).
- Ahora puede establecer los textos de Título, Indicación y Botón Atrás.
Swift 3:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let backItem = UIBarButtonItem()
backItem.title = "Back"
navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}
Nota: El botón Atrás pertenece al controlador de vista anterior, no el que se presenta actualmente en la pantalla. Para modificar el botón Atrás, debe actualizarlo antes de presionar, en el controlador de vista que inició el cambio:
Swift 4
En su UIViewController , configure esto:
let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton
Tenía un guión gráfico bastante complejo con muchos controladores de navegación, y mi cliente quería que todos los botones de retroceso dijeran "Atrás"
Pasé por Interface Builder y coloqué "Atrás" en el campo Atrás del botón de cada UINavigationItem.
¡No estaba trabajando para cada cambio de escena!
El problema era que no todos los controladores de vista en el guión gráfico tenían un UINavigationItem.
Lo arreglé arrastrando un nuevo UINavigationItem en cada UIViewController que no tenía uno, y estableciendo todos los campos del botón Atrás en "Atrás"
Tenga cuidado con los controladores que no tienen su propio UINavigationItem automáticamente.