El "botón Atrás" muestra de manera predeterminada el título de la última vista en la pila, ¿hay alguna manera de tener texto personalizado en el botón Atrás?UINavigationController "botón de retroceso" texto personalizado?
Respuesta
De this link:
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
Como se ha dicho Tyler en los comentarios:
no hacerlo en el controlador de vista visible, pero en la vista controlador que verías si presiona el botón Atrás
Deberías 'lanzar' el' UIBarButtonItem'. –
También tenga en cuenta que debe hacer esto en el controlador de vista un nivel arriba de la pila. En otras palabras, no haga esto en el controlador de vista visible, sino en el controlador de vista que verá si presiona el botón Atrás. – Tyler
Muchas gracias Tyler. ¡Tu comentario me ahorró mucho tiempo! –
Encontré una solución práctica para th está poniendo simplemente el título del controlador antes de empujar otro controlador en la pila, así:
self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];
A continuación, asegúrese de establecer el título original en viewWillAppear
, así:
-(void)viewWillAppear:(BOOL)animated
{
...
self.navigationItem.title = @"Original Title";
...
}
Este funciona porque el comportamiento predeterminado de UINavigationController
al construir el botón Atrás durante una operación de inserción es usar el título del controlador anterior.
El problema con esto es el cambio de título en la vista anterior a medida que se anima y se ve un poco malo Ninguna de las soluciones dadas aquí parece funcionar como te gustaría :-( –
Esto es perfecto en mi situación porque no muestro NavBar en la pantalla anterior y solo quiero quitar el títuloLabel del botón de retroceso en el nueva pantalla y solo tiene la flecha de chevron iOS7. Por lo tanto, puedo simplemente establecer un NSString literal vacío para el título. – siburb
empujar el controlador de vista elevar la excepción cuando toque – Sumit
Ampliando la sugerencia de Aubrey, se puede hacer esto en el controlador de vista del niño:
crean dos variables para almacenar los viejos valores de navigationItem.title de los padres y navigationItem de los padres
UINavigationItem* oldItem;
NSString* oldTitle;
en viewDidLoad
, añada lo siguiente:
oldItem = self.navigationController.navigationBar.topItem;
oldTitle = oldItem.title;
[oldItem setTitle: @"Back"];
en viewWillDisappear
, añada lo siguiente:
[oldItem setTitle: oldTitle];
oldTitle = nil; // do this if you have retained oldTitle
oldItem = nil; // do this if you have retained oldItem
No es perfecto. Verá que el título de la vista principal cambia a medida que el nuevo controlador está animado. PERO esto logra el objetivo de etiquetar de forma personalizada el botón Atrás y mantenerlo en forma de botón de respaldo estándar.
utilizo este:
// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.navigationBar.backItem.title = @"Custom text";
}
Esto casi me funciona, pero cuando hago clic en el botón Atrás, el texto cambia al título del padre durante la duración de la animación :-( –
Esto cambia el título del botón Atrás del controlador en la pila. No cambia el título del botón Atrás del controlador que se muestra actualmente. Par peor: ¡cambia el título del controlador anterior al controlador anterior! – leviathan
A s señalado por otros comentaristas, este método es un poco insostenible. No recomendaría hacer esto, ya que no es realmente cómo la API pretende que lo uses. ¡Podrías prepararte para errores difíciles en el futuro! – RickDT
en su método init, añada el siguiente código:
- (id)initWithStyle:(UITableViewStyle)style {
if(self = [super init]) {
//...
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:@selector(goBack)];
self.navigationItem.leftBarButtonItem = customBackButton;
[customBackButton release];
//...
}
return self;
}
continuación, agregue un método sencillo, para permitir viewcontroller Dismissing:
-(void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
Agregando a la respuesta de rein. Nota de documentos de Apple que la declaración de backBarButtonItem es la siguiente:
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
Por lo tanto, la respuesta de rienda perderá memoria debido a que el colocador sintetizada retain
la instancia se le pasa, que nunca se libera de forma explícita.Usted puede remediar esto mediante el uso autorelease
self.navigationItem.backBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease]; //<-- autoreleased
O usted podría señalar una variable en la instancia para que pueda liberar explícitamente más adelante:
UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];
Espero que esto ayude!
Nota en estos días, con ARC, no necesita preocuparse por la liberación automática (y de hecho el compilador tendrá un error si intenta liberar automáticamente en un proyecto habilitado para ARC) –
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
}
rein la respuesta funciona bien.
Tenga en cuenta que si pulsa más de un controlador de vista, el título del botón Atrás modificado aparecerá para cada uno de ellos, que puede no ser lo que desea.
En ese caso, deberá crear el UIBarButtonItem personalizado cada vez que presione un controlador de vista.
Además, asegúrese de hacerlo antes de presionando el controlador de vista, de lo contrario, obtendrá un error de pantalla a medida que cambie el título.
El título del botón Atrás está predeterminado para el título de la vista anterior, por lo que un truco rápido que uso es colocar el siguiente código en el archivo .m de la vista anterior.
-(void)viewWillAppear:(BOOL)animated {
// Set title
[email protected]"Original Title";
}
-(void)viewWillDisappear:(BOOL)animated {
// Set title
[email protected]"Back";
}
Esto funciona bastante bien para muchos casos, es bastante simple ... la única observación es que anular cualquiera de estos métodos requiere que se llame a la implementación del super en algún punto del nuevo método. – izk
Con este método, uno notará que el título de la vista principal cambia a 'Atrás' antes de que se produzca la animación de inserción. (Y, por cierto, es una mierda, que si mueves esto al método viewDidDisappear, verás que el interruptor está sucediendo después del empuje ...) –
Me encanta este método, pero el problema que enfrento con esto es que se establece el "Título original" bien, pero viene con puntos suspensivos si es más largo que "Atrás", lo cual debe ser porque, dado que la vista aún no está en la jerarquía de vistas, no retransmite la vista del título. El problema descrito por @JamesBoutcher anterior es imperceptible para mí debido a la rápida velocidad inicial de la animación.De hecho, me acabo de dar cuenta de que el problema que enfrento es especialmente notable debido a la animación de finalización lenta, que es cuando este problema es prominente. – trss
Descubrí algo interesante. Si la subclase UINavigationController
y reemplaza el método pushViewController:animated:
y hacer algo como esto: (tenga en cuenta que estoy usando ARC)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: nil action: nil];
viewController.navigationItem.backBarButtonItem = backButton;
[super pushViewController:viewController animated:animated];
Entonces para todos ViewControllers
que son empujadas con su controlador de navegación dispone de " Atrás "botón en ellos automáticamente. Si desea cambiar el texto de ciertos controladores de vista, puede intentar y quizás lanzar el controlador de vista a cierta clase o su propio protocolo personalizado (que su controlador de vista hereda de la cual podría tener un método como backButtonText
o algo así de tonto) que puede dar usted tiene cierta información sobre el controlador de vista que viene para que pueda personalizar el texto del botón de retroceso para él. Ahora, el texto del botón de retroceso se atiende en un lugar que debe ser el único responsable. Debo admitir que crear un nuevo botón para cambiar el texto apesta, pero bueno.
¿Alguien puede pensar en una razón para no hacerlo así? Por lo menos, no tiene que jugar con los títulos del controlador de visualización o tiene que recordar crear un nuevo botón de retroceso antes de presionar el controlador de visualización en el controlador de navegación.
poner esto en que viewDidLoad
, espero que resultará en lo que busca
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
Puede establecer el texto en el Generador de Interfaz:
Seleccione el elemento de navegación de la ViewController que la botón trasero volvería a:
En el atributo panel de utilidades Inspecto r, introduzca su etiqueta para el botón Atrás:
yo preferiría este enfoque sobre el establecimiento del título en el código como en la respuesta aceptada.
También tenga en cuenta que debe hacer esto en el controlador de vista un nivel arriba de la pila . En otras palabras, no haga esto en el controlador de vista visible, , sino en el controlador de vista que verá si presiona el botón Atrás.
--Tyler
Esta es la mejor respuesta que encontré hasta ahora. –
Para ser claros, esto debe establecerse en el elemento de navegación del controlador de vista, no en el inspector de atributos del controlador de vista. –
Esta es la mejor respuesta que encontré. – bicepjai
Hacer esto en el código de quitar el estilo botón de retroceso de la UINavigationConroller
. Si agrega un ítem de navegación en cada una de sus vistas, puede establecer el título del botón de fondo en el StoryBoard
.
Agregue el código siguiente en viewDidLoad o loadView
self.navigationController.navigationBar.topItem.title = @"Custom text";
he comprobado en iPhone y iPad con iOS 9
Debería ser self.navigationController? .navigationBar.backItem? .title = "Texto personalizado" – Peacemoon
La única diferencia que necesitaba era el encadenamiento opcional en las propiedades 'navigationController' y' topItem', por ejemplo: 'self.navigationController? .navigationBar.topItem? .title =" Texto personalizado "' – Bulwinkel
Si desea establecer título en llegar controlador (a veces más lógica ..) en swift 3 hacer:
func setBackButtonNavBar(title: String, delay: Double){
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: {() -> Void in
if let navBar = self.navigationController?.navigationBar{
navBar.backItem?.title = title
}
})
}
en la próxima controlador:
override func viewDidLoad() {
super.viewDidLoad()
self.setBackButtonNavBar(title: "back", delay: 0.3)
}
generalmente puse self.setBackButtonNavBar en una extensión de controlador.
- 1. Botón Atrás personalizado en UINavigationController
- 2. Haciendo botón de retroceso de vista raíz en UINavigationController
- 3. Botón de retroceso personalizado en la barra de navegación
- 4. Laravel botón de retroceso
- 5. Cómo cambiar el texto del botón de retroceso de uinavigationbar
- 6. Mostrando UIImagePickerController en UIPopoverController con UINavigationController existente (la adición de botón de retroceso)
- 7. cambiar la fuente del botón Atrás de UINavigationController
- 8. Simulando el botón Atrás de la UINavigationController en el iPhone
- 9. Android personalizado Editar texto y botón de respaldo anular
- 10. UINavigationController personalizado UIToolbar Imagen de fondo
- 11. El botón Atrás de UINavigationController desaparece?
- 12. ¿Cómo mostrar el botón Atrás en RootViewController del UINavigationController?
- 13. Botón de retroceso del controlador de navegación
- 14. Botón de retroceso página de actualización
- 15. UIPopoverController (y color botón de retroceso)
- 16. Ajax, botón de retroceso y actualizaciones DOM
- 17. ¿Cómo puedo personalizar el color del texto del botón Atrás en una vista de encabezado UINavigationController?
- 18. UINavigationController Botón Atrás no visible, pero funciona
- 19. Javascript obtener el valor de texto del botón personalizado
- 20. Teclado suave de Android personalizado Texto del botón "Hecho"?
- 21. Botón personalizado de Android; cambiar el color del texto
- 22. iphone - UIBarButtonItem personalizado para el botón Atrás
- 23. Enviar evento de tecla de retroceso para editar texto
- 24. fb: botón de inicio de sesión personalizado?
- 25. Cómo controlar el botón de retroceso de hardware
- 26. evento de "botón de retroceso" no se activará
- 27. Android: forma de botón personalizado
- 28. Plantilla de botón personalizado en WPF
- 29. jquerymobile phonegap botón de retroceso obtener el estado anterior
- 30. ¿Cómo puedo determinar si se muestra un botón de retroceso?
Este trabajo para mí 'self.navigationController.navigationBar.topItem.title = @" Texto personalizado ";' – huync