usa precio iphone

iphone - precio - UINavigationController "botón de retroceso" texto personalizado?



iphone xr (15)

El "botón Atrás" por defecto muestra el título de la última vista en la pila, ¿hay alguna manera de tener texto personalizado en el botón Atrás?


Agregando a la respuesta de rein. Nota de los documentos de Apple que la declaración de backBarButtonItem es esta:

@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem

Por lo tanto, la respuesta de rein perderá memoria porque el setter sintetizado retain la instancia por la que la pasa, que nunca se libera explícitamente. Puedes remediar esto usando autorelease

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Custom Title" style:UIBarButtonItemStyleBordered target:nil action:nil] autorelease]; //<-- autoreleased

O bien, podría señalar una variable en la instancia para que pueda lanzarla explícitamente más tarde:

UIBarButtonItem* item = ... self.navigationItem.backBarButtonItem = item; [item release];

¡Espero que esto ayude!


Agregue el siguiente código en viewDidLoad o loadView

self.navigationController.navigationBar.topItem.title = @"Custom text";

Lo probé en iPhone y iPad con iOS 9


Al hacer esto en código, elimine el estilo del botón UINavigationConroller del UINavigationConroller . Si agrega un ítem de navegación en cada una de sus vistas, puede establecer el título del StoryBoard fondo en el StoryBoard .


Ampliando la sugerencia de Aubrey, puede hacer esto en el controlador de vista infantil:

crear dos variables para almacenar los valores anteriores de navigationItem.title del padre y el elemento de navegación del padre

UINavigationItem* oldItem; NSString* oldTitle;

en viewDidLoad , agregue lo siguiente:

oldItem = self.navigationController.navigationBar.topItem; oldTitle = oldItem.title; [oldItem setTitle: @"Back"];

En viewWillDisappear , agregue 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.


De este enlace :

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom Title" style:UIBarButtonItemStylePlain target:nil action:nil];

Como dijo Tyler en los comentarios:

no hagas esto en el controlador de vista visible, sino en el controlador de vista que verías si presionas el botón Atrás


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 self.navigationItem.title=@"Original Title"; } -(void)viewWillDisappear:(BOOL)animated { // Set title self.navigationItem.title=@"Back"; }


Encontré una solución práctica para esto simplemente configurando 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];

Luego, asegúrese de establecer el título original en viewWillAppear , así:

-(void)viewWillAppear:(BOOL)animated { ... self.navigationItem.title = @"Original Title"; ... }

Esto 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.


He descubierto algo interesante. Si subclase el UINavigationController y anule el pushViewController:animated: y haga 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];

Luego, para todos los ViewControllers que se presionan con su controlador de navegación, tendrá el botón "Atrás" en ellos automáticamente. Si quieres cambiar el texto de ciertos controladores de vista, puedes probar y tal vez lanzar el controlador de vista a cierta clase o tu propio protocolo personalizado (que tu 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 por la cual 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.


Pon esto en viewDidLoad , espero que resulte en lo que estás buscando

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backBarButtonItem; [backBarButtonItem release];


Puede configurar el texto en el Constructor de Interfaces:

Seleccione el elemento de navegación del ViewController al que volverá el botón Atrás:

En el inspector de atributos del panel de utilidades, ingrese su etiqueta para el Botón Atrás:

Preferiría este enfoque que establecer el título en 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


Yo uso esto:

// 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"; }


en su método init, agregue 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; }

luego agregue un método simple para permitir que viewcontroller descarte:

-(void)goBack { [self.navigationController popViewControllerAnimated:YES]; }


la respuesta de rein funciona bien.

Tenga en cuenta que si presiona 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 presionar el controlador de visualización; de lo contrario, se producirá un error en la pantalla a medida que cambie el título.


si desea establecer el título en el controlador LLEGAR (a veces más lógica ...) en veloz 3 haga:

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 el próximo controlador:

override func viewDidLoad() { super.viewDidLoad() self.setBackButtonNavBar(title: "back", delay: 0.3) }

generalmente pongo self.setBackButtonNavBar en una extensión de controlador.


- (void)viewDidLoad { [super viewDidLoad]; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backButton; [backButton release]; }