Actualmente la izquierda el botón de la barra valor predeterminado es el título de la opinión de que la carga de la actual, en otras palabras, la vista que se muestra cuando se pulsa el botón (botón atrás).

Quiero cambiar el texto que aparece en el botón para algo más.

He intentado poner la siguiente línea de código en el controlador de vista del método viewDidLoad pero no parece funcionar.

self.navigationItem.leftBarButtonItem.title = @"Log Out";

¿Qué debo hacer?

Gracias.

InformationsquelleAutor Dale | 2009-09-19

36 Comentarios

  1. 341

    Este debe ser colocado en el método que llama a la ViewController titulado «NewTitle».
    Justo antes de la inserción o popViewController declaración.

    UIBarButtonItem *newBackButton = 
            [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                             style:UIBarButtonItemStyleBordered 
                                            target:nil 
                                            action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [newBackButton release];
    • Cuando en el niño controlador de vista, llamando a esto a partir de que el niño vista controlador no funcionará. Usted tiene que llamar a este de la vista principal del controlador, mientras que en el niño de controlador de vista.
    • A continuación, hacen de esta la respuesta, porque el uno de los que eligieron es técnicamente incorrecto.
    • O en una sola línea: auto.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@»Atrás», @»») estilo:UIBarButtonItemStyleBordered objetivo:nil acción:nil] grupo de liberación automática]; Gracias!
    • Para cambiar el botón atrás de mi tercer nivel de la vista controlador (segunda pulsación) he tenido que utilizar la siguiente línea en lugar de la respuesta anterior: [[auto.parentViewController navigationItem] setBackBarButtonItem: newBackButton]; Estoy haciendo algo mal?
    • Jordania dice que «[agregado] un poco más de claridad sobre donde poner el código.» Aquí es aún más claridad: lo pongo en la primera (también conocido como padre de familia) controlador, inmediatamente antes de la llamada a empujar el segundo (aka niño) controlador.
    • usted puede crear una costumbre BaseViewController y lo ponen en -viewDidLoad:
    • Usted no tiene que hacer esto justo antes de push o pop. Usted puede hacerlo en viewDidLoad o loadView o cualquier otro lugar que establezca el título y otras propiedades de este punto de vista. Victor Bogdan, la respuesta es clara, en mi humilde opinión.
    • Estoy usando esto en iOS 8.4 y 9. Voy a hacer esto justo antes de que me empuje el nuevo viewcontroller (yo lo estoy haciendo a través de transición), y funciona de maravilla.
    • Por encima de la solución de las obras, excepto que no necesita última línea en la modalidad de ARCO. ‘liberación’ no está disponible en automático referencia modo de conteo.
    • Uso UIBarButtonItemStylePlain al mínimo la implementación de destino es iOS7 o más tarde. UIBarButtonItemStyleBordered está en desuso.

  2. 95

    En ChildVC esto funcionó para mí…

    self.navigationController.navigationBar.topItem.title = @"Back";

    Obras de Swift también!

    self.navigationController!.navigationBar.topItem!.title = "Back"
    • Probado y comprobado en iOS 7 en Xcode 5.0.2. Esto VA a cambiar a la pantalla anterior del título de Vuelta al volver a ella, aunque.
    • Simplicidad de la solución. Funciona tanto en iOS 6 y 7. Poner en la base de UIViewController y hecho. Mucho mejor que el IB de la solución o de la configuración en la empujando vc.
    • cambia el título de la vista anterior del controlador, que es el problema de esta solución
    • Usted puede fijar el azulejo de vuelta en viewWillDisappear
  3. 81

    Aquí es la documentación para backBarButtonItem:

    «Cuando este elemento de navegación está inmediatamente por debajo de la parte superior del elemento en el
    de la pila, la navegación controlador deriva el botón atrás para el
    barra de navegación de este elemento de navegación. […] Si quieres
    especificar una imagen personalizada o título para el botón atrás, se puede asignar un
    personalizado botón de la barra de elemento (con el título personalizado o imagen) para este
    la propiedad en su lugar.»

    Controlador de vista de Un (el «padre» vista controlador):

    self.title = @"Really Long Title";
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
    self.navigationItem.backBarButtonItem = backButton;

    Cuando cualquier otro controlador de vista de B es en la parte superior de la pila de navegación, y Un está justo debajo, B‘s botón tendrá el título «Corto».

    • la parte difícil es que usted necesita para configurar el botón atrás en la vista principal de la controladora y no el niño. Desperdicio de una hora se dio cuenta de esto.
  4. 56

    en Xcode 4.5 uso de guión, con mucho, la solución más sencilla que he encontrado cuando el valor de la parte Posterior de botón no tiene que cambiar de forma dinámica es utilizar el «Botón Atrás» campo asociado con el Elemento de Navegación de la Vista Controlador que desea que el botón «Atrás» para decir algo más.

    por ejemplo, en la imagen de abajo, quiero que el botón Atrás para la vista controlador(s) que me empuje a tener»», como el título del botón Atrás.

    ¿Cómo puedo cambiar el título del botón

    por supuesto, esto no funcionará si usted necesita el botón atrás para decir algo ligeramente diferente cada vez … no están todas las otras soluciones aquí para eso.

    • A la pregunta original, no decir nada sobre el uso de storyboards, por lo que es definitivamente bueno este es no el aceptado respuesta, sin embargo, una correcta solución de este es para el guión basado en el desarrollo.
  5. 42

    Sé, la cuestión es muy antiguo, pero he encontrado una buena solución.

    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
    barButton.title = @"Custom Title";
    self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

    Obras de childView! Probado con iOS 7.

    • Esto sólo parece funcionar a un nivel. No es trabajo de un hijo de un hijo para mí. iOS 8.
  6. 26

    Tal vez, soy más simple, pero a partir De la documentación de Apple el texto es:

    Si un personalizado botón de la barra de elemento no está especificado por el punto de vista de los controladores, un predeterminado botón atrás se utiliza y su título se establece en el valor de la propiedad de título de la vista anterior del controlador, es decir, el controlador de vista de un nivel hacia abajo en la pila.

    La solución de marcado correcto anterior se configura un botón predeterminado elemento desde el controlador principal. Es la respuesta correcta, pero estoy resolver el problema cambiando self.title propiedad de la UIViewController a la derecha antes de pulsar el nuevo controlador sobre la NavigationController de la pila.

    Esto actualiza automáticamente el botón atrás del título en el siguiente controlador, y como establece self.title de volver a lo que debe ser en viewWillAppear yo no puedo ver a este método causando demasiados problemas.

  7. 19

    Este trabajo mejor para mí. Probar :

     self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
    initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
  8. 19

    En Swift/iOS8, los siguientes trabajó para mí:

    let backButton = UIBarButtonItem(
          title: "Back Button Text",
          style: UIBarButtonItemStyle.Bordered,
          target: nil,
          action: nil
    );
    
    self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

    Portado de Felipe respuesta.

    • swift 1.1 sintaxis es self.navigationController?.navigationBar.topItem?.backBarButtonItem
    • El estilo debe ser UIBarButtonItemStyle.Llano
    • Gracias por este. Lo verdaderamente patético de la API de esto es. Y representante de UIKit en general. Entre las barras de navegación y Barras de Estado en iOS, es una maravilla que todavía desarrollar para esta prohibida la plataforma. Gracias niño jesús de Desbordamiento de Pila y sus colaboradores!
    • Usted debe desarrollar para Android por unos meses 😉
  9. 17

    Ok, aquí está el camino. Si usted tiene un controlador de vista de «primera» y navegar a otro controlador de vista de «segunda» pulsando un botón o etc. lo que usted necesita hacer algún trabajo.
    En primer lugar usted necesita para crear un BarButtonItem en la «segunda» controlador de vista del método ViewDidLoad como este;

        UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                       initWithTitle:@"Back" 
                                       style:UIBarButtonItemStyleBordered
                                       target:self
                                       action:@selector(OnClick_btnBack:)];
        self.navigationItem.leftBarButtonItem = btnBack;
        [btnBack release];

    Después de hacer eso, usted necesita escribir el código para «btnBack» la acción en el mismo .m archivo como este;

    -(IBAction)OnClick_btnBack:(id)sender  {
          [self.navigationController popViewControllerAnimated:YES];
        //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
    }

    Eso es todo.

    • Un leftBarButtonItem no tiene el aspecto de un backBarButtonItem, si que es importante en el diseño de la aplicación.
    • Una de las soluciones publicado (muchas gracias) este parece que funciona, aunque como Alex se indicó anteriormente, el de la izquierda el botón de la barra no se ve como elemento de la barra. ¿Cómo puedo hacer que se vea como elemento de la barra???
  10. 15

    Tuve un padre controlador de vista con un título largo. Esto resultó en el botón atrás de texto sangrado en el título del niño controlador de vista.

    Después de probar un montón de diferentes tipos de soluciones, esto es lo que acabé haciendo (en expansión en el @juan.k.doe enfoque):

    Con Xcode 7.2, Swift 2

    1. En el Guión gráfico, agregar un Navigation Item a la Padre Controlador de Vista de escena (no el niño VC)

    ¿Cómo puedo cambiar el título del botón

    1. En el Attributes Inspector de su nuevo Navigation Item, escriba en un space personaje en el Back Button campo. Más sobre esto más adelante.

    ¿Cómo puedo cambiar el título del botón

    ¿Cómo puedo cambiar el título del botón

    1. En el Padre controlador de vista, agregue el código siguiente:

    fragmento:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        switch segue.destinationViewController {
        case is ChildViewController:
            navigationItem.backBarButtonItem?.title = ""
        default:
            navigationItem.backBarButtonItem?.title = "Full Parent Title"
        }
    }

    Explicación:

    El botón atrás especie de pertenece a los padres de controlador de vista. El Navigation Item le da un identificador para el botón, así que usted puede poner el título en el código o en el Guión gráfico.

    Nota:

    Si deja el Navigation Item Back Button de texto como el valor predeterminado cadena vacía, el botón atrás del título se convertirá en «Volver».

    Otros enfoques de trabajo, ¿por qué usar esta?:

    Mientras que es posible reemplazar el botón atrás del título en el niño controlador de vista, fue un reto el conseguir una manija hasta que ya había brilló brevemente en la pantalla.

    Algunos de los enfoques de la construcción de un nuevo botón atrás y reemplazar el existente. Estoy seguro de que funciona, y probablemente necesario en algunos casos de uso. Pero prefiero aprovechar las Api existentes cuando sea posible.

    Cambiar el title de la vista principal del controlador es la forma más rápida de solución para algunas situaciones. Sin embargo, este cambio, el padre de título, de modo que han de administrar el estado. Las cosas se ponen difíciles con un Tab Bar Controller debido a los cambios de título de causar efectos secundarios con el Tab Bar Item títulos.

  11. 10

    Para aquellos que utilizan los storyboards sólo seleccionar el /los padre (no la que es la celebración de vista de destino) controlador de vista de marco (asegúrese de que usted haga clic derecho en la barra de Navegación, a continuación, abra los atributos del inspector, donde encontrarás tres formulario de entradas. La tercera «botón atrás» es que estamos buscando.

    • esta es la mejor solución si usted no se preocupan acerca de la localización.
  12. 7

    Swift versión:

    De su hijo ViewController:

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.backItem?.title = "TEXT"
    }
    • esto va a cambiar el título de la vista controlador anterior en la pila de «TEXTO», que es menos que ideal.
  13. 6

    He aquí otra manera de hacerlo.

    De su padre controlador de vista, aplicar el siguiente método:

    - (void) setBackBarButtonItemTitle:(NSString *)newTitle {
      self.navigationItem.backBarButtonItem.title = newTitle;
    }

    De su hijo controlador de vista, cuando se desea cambiar el título, esto va a funcionar:

    NSArray *viewControllerArray = [self.navigationController viewControllers];
    int parentViewControllerIndex = [viewControllerArray count] - 2;
    [[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

    Nunca fue capaz de obtener la parentViewController propiedad:

    [(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

    No sé si es un bug o no lo estoy usando correctamente. Pero el acaparamiento de la segunda a la última vista controlador en el viewControllers matriz de puntos a los padres de controlador de vista, y puedo llamar a los padres de los métodos correctamente con esa referencia.

  14. 5

    aceptar. Yo personalmente odiaba a todas estas opciones. Por lo tanto, yo me vine con mis propios.

    Basado en la información que he visto. Parece que el Anterior controlador de vista está en control de su propio botón de «Atrás», que será presentado en la empujó controlador de vista.

    He creado un Perezoso método de Carga para el navigationItem en el controlador que desea que el cambió de nuevo el Botón.

    La mía es una invitación Comprador Controlador de

    Invitar Comprador es el texto que está configurado por defecto.

    pero el botón atrás necesarios para ser Invitar a

    Aquí está el código que he usado para crear el botón atrás.

    Me coloca este código en la parte superior de la contraloría Implementatio (.m) el archivo y se pasó el super del método automáticamente.

    - (UINavigationItem *)navigationItem{
        UINavigationItem *item = [super navigationItem];
        if (item != nil && item.backBarButtonItem == nil)
        {
            item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
            item.backBarButtonItem.title = @"Invite";
        }
    
        return item;
    }

    Siento que esta es una manera mucho más elegante manera de lograr esto.

    Yo coloque este código en un solo lugar, y automáticamente se rellena cuando sea necesario.

    No es necesario llamar el código antes de cada empuje solicitud.

    Espero que esto ayude

  15. 5
    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                       initWithTitle:@"Back" 
                                       style:UIBarButtonItemStyleBordered
                                       target:self
                                       action:@selector(OnClick_btnBack:)];
        self.navigationItem.leftBarButtonItem = btnBack;
        [btnBack release];
  16. 5

    Aquí está la respuesta:

    En viewDidAppear:animated (NO en viewDidLoad), haga lo siguiente

    - (void)viewDidAppear:(BOOL)animated
    {
         [self.navigationController.navigationBar.backItem setTitle:@"anything"];
    
         //then call the super
         [super viewDidAppear:animated];
    }

    Que si quieres mantener la forma del botón atrás.

    • No está mal, excepto que se puede ver el cambio de los títulos. He intentado en viewWillAppear y no funciona.
  17. 5

    Ninguna de las soluciones que se explican aquí trabajó para mí. Así que lo que hice fue quitar el título de la escena de donde yo venía de la siguiente manera:

    self.title = @"";

    Así que cuando la nueva escena se presenta el texto no aparece.

    Me absoluty de acuerdo en que esto no es una solución clara, pero trabajado y ninguno de los explicó trabajó para mí.

    • Hombre, tengo que decirte, es de 2017 y todavía sigue siendo un dolor en el$$ para manejar el botón atrás. Su método ha funcionado para mí y que terminó con el «<» signo aunque yo quería que la palabra «Cancelar», pero me conformaré con lo que tengo. 🙂
  18. 5

    Para Swift:

        //Rename back button
        let backButton = UIBarButtonItem(
            title: "Back",
            style: UIBarButtonItemStyle.Plain, //Note: .Bordered is deprecated
            target: nil,
            action: nil
        )
        self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton
  19. 4

    Me he encontrado, que la forma más sencilla de cambiar el nombre del botón atrás es para configurar la vista de los controladores de título el título de la parte posterior del botón y, a continuación, en sustitución de la titleView en la opinión de los controladores de navegación elemento a una etiqueta personalizada con su nombre real.

    Como este:

    CustomViewController.m

    @implementation CustomViewController
    
    - (NSString*)title {
        return @"Back Button Title";
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = @"Navigation Bar Title";
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);
    
        [customTitleView sizeToFit];
    
        self.navigationItem.titleView = [customTitleView autorelease];
    }
    
    @end

    Esto hará que su título en UINavigationBar mirada como si fuera nativa. Dando el controlador de vista de la capacidad para tener separados el título y el botón de retroceso título.

    En el caso del controlador de vista de a y B, a es el responsable de contar cómo es de nuevo el botón de buscar, mientras que la B se muestra.

    EDIT: Esto también mantiene el botón atrás nativo aspecto (el de La izquierda flecha botón de la barra de elemento).

  20. 4

    Este código también funciona. Poner esto en la raíz del controlador de la navegación de controlador:

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

    He encontrado que es mejor cambiar el título de la vista actual de la controladora en la pila de navegación para el texto del botón atrás antes de empujar a la siguiente vista controlador.

    Por ejemplo

    self.navigationItem.title = @"Desired back button text";
    [self.navigationController pushViewController:QAVC animated:NO];

    A continuación, en la viewDidAppear establecer el título de la vuelta al título deseado para el original de la VC. Voila!

  22. 4

    Soy nuevo en iOS, pero voy a dar mi respuesta muy sencilla de reemplazar la navegación de la clase controlador.
    He simple anular la push y pop de los métodos y guardar el título de la vista anterior del controlador. Lo siento para pegar en js bloque. Fue poco confundido como a pasado en normal bloque de código.

    JS:

    #import "MyCustomNavController.h"
    
    
    @implementation MyCustomNavController {
    
        NSString *_savedTitle;
    }
    
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
        _savedTitle = self.topViewController.title;
    
        self.topViewController.title = title;
        [super pushViewController:viewController animated:animated];
    }
    
    - (UIViewController *)popViewControllerAnimated:(BOOL)animated {
    
        [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
        return [super popViewControllerAnimated:animated];
    }
    
    @end

  23. 4

    self.navigationController.navigationBar.backItem.title = @"TEXT";

    Y en Swift:

    self.navigationController?.navigationBar.backItem?.title = "TEXT"
  24. 3
    self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                                  initWithTitle:@"Log out" 
                                                  style:UIBarButtonItemStyleDone 
                                                  target:nil 
                                                  action:nil] autorelease];

    usted puede ponerlo donde quiera que te gusta en el código de la parrent controlador, que allowes que han differenct backbuttons para los diferentes puntos de vista.

  25. 3

    La mayoría de las soluciones mata el estilo original de BackButton (el de La izquierda flecha botón de la barra), mientras que la adición usual de un botón con el título deseado.

    Así que para mantener el estilo original hay 2 maneras:

    1º: el uso De indocumentados estilo de botón (110 o algo así) que yo prefiero no hacer. Pero si usted desea que usted podría encontrar la manera de hacerlo aquí, en stackoverflow.

    2º: Para usar, yo la Trenskow la idea. Me gustó y lo uso un poco cambiado.

    En lugar de reemplazar – (NSString*)título he decidido mantener el título original de la siguiente manera (lo cual me permite el uso de la plumilla de los títulos así como el título en push estado btw).

    - (void)viewDidLoad {
        [super viewDidLoad];
        static NSString * backButtonTitle[email protected]"Back"; //or whatever u want
    
        if (![self.title isEqualToString:backButtonTitle]){
    
            UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
            customTitleView.text = self.title; //original title
            customTitleView.font = [UIFont boldSystemFontOfSize:20];
            customTitleView.backgroundColor = [UIColor clearColor];
            customTitleView.textColor = [UIColor whiteColor];
            customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
            customTitleView.shadowOffset = CGSizeMake(0, -1);
    
            [customTitleView sizeToFit];
    
            self.navigationItem.titleView = [customTitleView autorelease];
            self.title = backButtonTitle; 
        }
    }

    Esta solución funciona bien y se ve nativo. También si el uso es en el método viewDidLoad impide la ejecución de más de 1 vez.

    También he probado un Jessedc la solución, pero se ve mal. Se hace visible para el usuario de la barra de título de cambiar sobre la marcha del original a la BackButton deseada y la espalda.

  26. 2

    Esto funciona para mí como una versión «simplificada» de las anteriores respuestas.

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];
    
    backButton.title = @"Go Back";
    
    self.navigationItem.backBarButtonItem = backButton;

    Recuerda poner el código dentro de la vista principal del controlador (por ejemplo, la vista que tiene su vista de tabla o UITableViewController), no el niño o la vista de detalle (por ejemplo, UIViewController).

    Usted puede localizar fácilmente en el botón atrás de la cadena como esta:

    backButton.title = NSLocalizedString(@"Back Title", nil);
  27. 2

    Tenemos dos VC a y B.

    Si quieres cambiar el título en la B, escribe este código en Un

    - (IBAction)goToBViewController:(UIButton *)sender {
    
        BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
        UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                      style:UIBarButtonItemStylePlain
                                                                     target:nil
                                                                     action:nil];
        [[self navigationItem] setBackBarButtonItem:newBackButton];
        [self.navigationController pushViewController:vc animated:NO];
    
    }

    Swift Xcode 4.1 9.4

    let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
    let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
    navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
    navigationController?.pushViewController(secondViewController!, animated: true)
  28. 1

    Stan respuesta fue la mejor. Pero también tiene un problema, cuando se utiliza el controlador con una Barra de pestañas y cambiar el controlador del título, que podría cambiar la Pestaña de la Barra de título también.Así que la mejor respuesta es cambiar el view_controller.navigationItem.el único título y el uso de la view_controller.navigationItem.título en la función.
    La respuesta está aquí:(Con ARCO y agregarlos a la vista del viewDidLoad)

      static NSString * back_button_title[email protected]"Back"; //or whatever u want
      if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
        UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
        custom_title_view.text = view_controller.navigationItem.title; //original title
        custom_title_view.font = [UIFont boldSystemFontOfSize:20];
        custom_title_view.backgroundColor = [UIColor clearColor];
        custom_title_view.textColor = [UIColor whiteColor];
        custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        custom_title_view.shadowOffset = CGSizeMake(0, -1);
    
        [custom_title_view sizeToFit];
    
        view_controller.navigationItem.titleView = custom_title_view;
        view_controller.navigationItem.title = back_button_title;
      }

    En el mismo uso, me hacen una función como esta, solo tiene la función con una sola línea de código en el viewDidLoad.

    + (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
      static NSString * back_button_title[email protected]"Back"; //or whatever u want
      if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
        UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
        custom_title_view.text = view_controller.navigationItem.title; //original title
        custom_title_view.font = [UIFont boldSystemFontOfSize:20];
        custom_title_view.backgroundColor = [UIColor clearColor];
        custom_title_view.textColor = [UIColor whiteColor];
        custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        custom_title_view.shadowOffset = CGSizeMake(0, -1);
    
        [custom_title_view sizeToFit];
    
        view_controller.navigationItem.titleView = custom_title_view;
        view_controller.navigationItem.title = back_button_title;
      }
    }
  29. 1

    Si quieres no sólo para cambiar el texto del botón Atrás para el mismo texto y siendo el original de la flecha a la izquierda de la forma, pero también para hacer algo cuando el usuario hace clic en el botón Atrás, os recomiendo echar un vistazo alrededor de mi «CustomNavigationController«.

  30. 1

    PROBLEMA: «de Vuelta» de texto en la barra de navegación no puede ser reemplazado.

    RAZÓN: «de Vuelta» de la etiqueta se encuentra en la barra de navegación después de empujar una vista, porque .atributo de título de la vista principal del controlador se establece en cero (o no inicializado).

    UNA SOLUCIÓN: Si el auto.title=»Lo que sea…» vas a ver que en lugar de «Regresar», aparecerá «Lo que sea…» después de empujar de nuevo controlador de vista.

  31. 1

    Utilizar la siguiente línea de código :

    UIBarButtonItem *newBackButton =
    [[UIBarButtonItem alloc] initWithTitle:@"hello"
                                     style:UIBarButtonItemStylePlain
                                    target:nil
                                    action:nil];
    
    self.navigationItem.leftBarButtonItems =[[NSArray alloc] initWithObjects:newBackButton, nil];
    
    self.navigationItem.leftItemsSupplementBackButton = YES;
  32. 1

    Swift 4

    iOS 11.2

    Xcode 9.2

    TableViewController1  ---segue--->   TableViewController2

    Usted puede cambiar el texto del botón atrás en TableViewController1 o TableViewController2.

    Cambiar el botón atrás de texto dentro de TableViewController1:

    1) En viewWillAppear():

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        let myBackButton = UIBarButtonItem()
        myBackButton.title = "Custom text"
        navigationItem.backBarButtonItem = myBackButton
    }

    Por alguna razón, viewDidLoad() es demasiado temprano para agregar el botón atrás para el NavigationItem. Para conectar los dos TableViewControllers, en el guión gráfico de control de arrastre de la TableViewCell en TableViewController1 a la mitad de TableViewController2 y en el menú que aparece seleccionar Selection Segue > Show.

    2) En tableView(_:didSelectRowAt:):

    override func tableView(_ tableView: UITableView, didSelectRowAt: IndexPath) {
    
        let myButton = UIBarButtonItem()
        myButton.title = "Custom text"
        navigationItem.backBarButtonItem = myButton
    
        performSegue(withIdentifier: "ShowMyCustomBackButton", sender: nil)
    }

    Para conectar los dos TableViewControllers, en el guión gráfico de control de arrastre desde el pequeño círculo amarillo sobre TableViewController1 a la mitad de TableViewController2 y desde el menú que aparece seleccione Manual Segue > Show. A continuación, seleccione la secuencia de conexión de los dos TableViewControllers, y en los Atributos del Inspector de al lado «Identificador» enter «ShowMyCustomBackButton».

    3) En el storyboard:

    Si sólo necesita estática de texto personalizado para la parte de atrás del botón, seleccione el NavigationItem para TableViewController1 (tiene un < para un icono en el guión gráfico de la tabla de contenido), a continuación, abra los Atributos del Inspector y en el «Botón de Atrás» introduce tu texto personalizado (asegúrese de que la ficha de campo para que el cambio surta efecto).


    Cambiar el botón atrás de texto dentro de TableViewController2:

    1) En viewWillAppear():

    class MySecondTableViewController: UITableViewController {
    
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
    
            let myBackButton = UIBarButtonItem(
                title: "<Custom text",
                style: .plain,
                target: self,
                action: #selector(goBack)  //selector() needs to be paired with an @objc label on the method
            )
    
            navigationItem.leftBarButtonItem = myBackButton
        }
    
        @objc func goBack() {
            navigationController?.popViewController(animated: true)
        }

    Para conectar los dos TableViewControllers, en el guión gráfico de control de arrastre de la TableViewCell en TableViewController1 a la mitad de TableViewController2 y en el menú que aparece seleccionar Selection Segue > Show.

  33. 1

    Según documento de UINavigationBar>backItem

    ¿Cómo puedo cambiar el título del botón

    Si el leftBarButtonItem propiedad de la superior de navegación elemento es
    nil, la barra de navegación muestra un botón atrás cuyo título deriva
    desde el elemento en esta propiedad.

    Pero backItem.backBarButtonItem no funciona en el primer tiempo viewWillAppear. Ajuste de la topItem.backBarButtonItem sólo funciona en el primer tiempo viewWillAppear. Porque navigationBar.topItem se sigue apuntando a la previousViewController.navigationItem. En viewWillLayoutSubviews, el topItem y backItem se actualizan. Así que después de la 1ª vez viewWillAppear, debemos establecer el backItem.backBarButtonItem.

    RESPUESTA : Configuración de un backBarButtonItem a la navigationItem de la anterior viewController no importa cuando y donde en su actual viewController (la parte superior viewController). Este código se puede utilizar en viewWillAppear o viewDidLoad. Revise mi blog iOS Conjunto de la Barra de Navegación de Vuelta el Botón de Título de detalle en el análisis.

     NSArray *viewControllerArray = [self.navigationController viewControllers];
        //get index of the previous ViewContoller
        long previousIndex = [viewControllerArray indexOfObject:self] - 1;
        if (previousIndex >= 0) {
            UIViewController *previous = [viewControllerArray objectAtIndex:previousIndex];
            previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                                                             initWithTitle:backButtonTitle
                                                             style:UIBarButtonItemStylePlain
                                                             target:self
                                                             action:nil];
        }
    • De acuerdo a su entrada en el blog: reemplazar func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() vamos a customBackButton = UIBarButtonItem(título: «BackTitle», estilo: .confinado, el objetivo: nil, acción: nil) auto.navigationController?.navigationBar.backItem?.backBarButtonItem = customBackButton }
  34. 1

    Si usted tiene más de una navegación que es

    ParentViewController –> ChildViewController1 –> ChildViewController2

    puede utilizar el siguiente código para cambiar el título del botón «atrás» en la barra de navegación.

    auto.navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem.init(título: «de Vuelta», estilo: .llano, diana: nil, acción:nil)

    • funciona muy bien!!!!
  35. 0

    Parece que la navegación controlador busca

    previousViewController.navigationItem.title

    Si nada no se ve para

    previousViewController.title
  36. 0

    Esto funciona para mí en Swift 4 y iOS 11. Más comúnmente necesito hacer esto cuando el usuario pulsa en una fila en una tabla de la vista y un nuevo controlador de vista se inserta en la pila de navegación. Por lo general, desea que el botón atrás para ser el nombre o algún atributo del objeto representado por la fila que fue aprovechado. Así que me suelen hacer esto en didSelectRowAt... como este:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
        let object = //get the object this row represents
    
        let backButton = UIBarButtonItem()
        backButton.title = object.name //or whatever
        self.navigationItem.backBarButtonItem = backButton
    
        //now show or segue to the next view controller
    }

Dejar respuesta

Please enter your comment!
Please enter your name here