Cómo configurar el texto del botón de retroceso en Swift


118

¿Cómo se elimina el texto del botón de retroceso?

current back button: <Back 
desired back button: <AnythingElse 

Ninguno de ellos ha trabajado:

self.navigationItem.backBarButtonItem?.title = "Back" 
self.backItem?.title = "" 
self.navigationController?.navigationBar.backItem?.title = "" 
self.navigationItem.backBarButtonItem?.title = "" 
self.navigationController?.navigationItem.backBarButtonItem?.title="Back" 
self.navigationController?.navigationBar.backItem?.title = "" 
self.navigationController?.navigationItem.backBarButtonItem?.title 
394

El botón de retroceso pertenece al controlador de vista previa , no la que actualmente presentan en la pantalla.
Para modificar el botón de retroceso debe actualizarlo antes empujar, en el controlador de vista que inició la segue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let backItem = UIBarButtonItem() 
    backItem.title = "Something Else" 
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed 
} 

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 
} 
+5

Muchas gracias , no sabes cuántas horas gasto solo por ese pequeño detalle (el controlador anterior) 07 feb. 162016-02-07 16:29:56

+3

Si pudiera votar un millón de veces lo haría. No puedo decir cuánto tiempo pasé preguntándome por qué no estaba funcionando (anteriormente estaba en el controlador de destino) 24 may. 162016-05-24 21:18:34

+6

"El botón Atrás pertenece al controlador de vista anterior" ¡esa es la respuesta más valiosa que he encontrado sobre este tema! ¡Gracias! 01 dic. 162016-12-01 14:38:25

  0

Creo que está bien establecerlo de esta manera. Pero te recomiendo que, si es posible, establezcas el 'título' de tu' viewController' anterior en la pila de navegación. Ese es un enfoque mucho mejor. 10 abr. 172017-04-10 16:37:30

+1

Establecer el 'título' cambia el * título *, no solo el botón Atrás. 11 abr. 172017-04-11 00:39:28

+1

He añadido self.navigationController! .navigationBar.topItem! .backBarButtonItem = backItem en lugar de navigationItem.backBarButtonItem = backItem y funciona bien en Swift 3. Gracias 06 may. 172017-05-06 10:35:50

  0

Muchas gracias, esta es la respuesta correcta. 15 jun. 172017-06-15 12:54:51

  0

Este es el derecho a hacerlo. También me gustaría señalar si no está utilizando las vistas segue para mostrar, aún funciona siempre que cambie el elemento BackBarButtonItem antes de mostrar su vista. 29 jun. 172017-06-29 03:18:25

+1

Curiosamente, si desea titular no es nada, debe configurarlo en "", no "". "" solo deja mucho espacio, entrometiéndose en la vista del título. 12 ago. 172017-08-12 00:05:01

+1

Funciona en 'viewDidLoad' también. 18 oct. 172017-10-18 16:24:32

  0

esta es la única solución que funcionó para mí. muchas gracias 11 nov. 172017-11-11 22:43:02


7

esto debería funcionar:

override func viewDidLoad() { 
    super.viewDidLoad() 

    var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack") 
    self.navigationItem.backBarButtonItem = button 

} 

func goBack() 
{ 
    self.navigationController?.popViewControllerAnimated(true) 
} 
+8

la forma correcta de hacerlo, estas a reemplazar el botón de retroceso 29 ago. 152015-08-29 09:14:40

  0

mejor hacerlo desde el constructor de interfaces 10 may. 162016-05-10 12:49:11


0

Eso es porque debe hacerlo en el prepareForSegue de sus padres viewController:

este debería hacer el truco:

// MARK: - Navigation 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    navigationItem.title = "AnythingYouWant :)" 
} 

Saludos

+4

Esto actualizará el título en el controlador de vista y no sólo el botón de retroceso 29 ago. 152015-08-29 09:21:58


76

usted puede hacerlo desde la interfaz generador de la siguiente manera:

haga clic en el elemento de navegación de la vista anterior controlador

enter image description here

desde el inspector de atributos, establezca el texto del botón Atrás en lo que desee. Eso es todo!

enter image description here

+1

¿Cuál es la mejor manera de asignar 'nil'? 05 abr. 162016-04-05 00:13:47

  0

@kennydust ¿Te refieres a un título en blanco? 05 abr. 162016-04-05 03:10:17

  0

sí. ¿Hay alguna forma de crear la interfaz? 05 abr. 162016-04-05 23:00:05

+5

@kennydust sí en el botón Atrás agregue espacio y presione intro 06 abr. 162016-04-06 12:11:49

  0

Agradable y fácil, pero ¿es localizable? 27 may. 162016-05-27 19:35:14

  0

@ThePumpingLama a medida que localiza los guiones gráficos se localiza automáticamente 28 may. 162016-05-28 14:51:49

+1

@AjinkyaPatil Intenté esto pero el botón Atrás no aparece. ¿Alguna razón por la que esto puede ser? 01 jun. 162016-06-01 22:11:31

  0

@ user805981 está mostrando el texto del botón Atrás? 02 jun. 162016-06-02 06:57:51

  0

@AjinkyaPatil no, no es 03 jun. 162016-06-03 14:45:04

  0

@ user805981 ¿Ha ajustado el texto del botón de retroceso en el mismo controlador de vista o controlador de vista anterior desde el que está presionando el controlador de vista? 03 jun. 162016-06-03 14:54:19

  0

@AjinkyaPatil Sí, tengo. Sigue sin funcionar. ¿Tienes un ejemplo de github? ¡Gracias! 15 jun. 162016-06-15 21:59:51

+3

Esto es mucho más limpio que la respuesta aceptada IMO. 15 nov. 162016-11-15 01:19:31


24

texto-botón Atrás se toma del título elemento de navegación de los padres vista-controlador. Entonces, cualquier cosa que establezca en el título de elemento de navegación del controlador de vista anterior, se mostrará en el texto del botón de retroceso del controlador de vista actual. Puede simplemente poner "" como título de elemento de navegación en el método viewWillAppear de parent view-controller.

self.navigationItem.title = "" 

Otra forma es poner

self.navigationController?.navigationBar.topItem?.title = "" 

en el método viewWillAppear de controlador de vista actual. Este causará algún otro problema si la pila de navegación está demasiado anidada.

+1

self.navigationItem.title = "" debería estar en la parte superior como la mejor respuesta! 07 may. 162016-05-07 16:45:11

  0

Estoy de acuerdo con esto porque la mejor respuesta es que todas las respuestas anteriores requieren agregar una función de destino al elemento de navegación, por lo que no solo cambian el texto sino que también agregan una función pop personalizada, ¡lo cual no es requerido por la pregunta! 17 ene. 172017-01-17 08:03:05


3

En el método de la presentar controlador complemento viewDidLoad:

// hide navigation bar title in the next controller 
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil) 
navigationItem.backBarButtonItem = backButton 

10

El botón de retroceso pertenece al controlador de vista previa, no el que actualmente se presenta en la pantalla. Para modificar el botón de retroceso se debe actualizar antes de empujar, añadir viewDidLoad:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

20

No sé donde se han utilizado los métodos que se pone en su pregunta, pero que podría conseguir el resultado deseado si uso, en mi clase ViewController (en el que yo quiero cambiar el botón de retroceso), en función de viewDidLoad(), la siguiente línea:

self.navigationController?.navigationBar.backItem?.title = "Anything Else" 

el resultado será:

Antes

enter image description here

Después

enter image description here

+1

En mi caso solo funcionó si colocas este fragmento de código en el método viewDidAppear y no en viewDidLoad one 11 oct. 172017-10-11 13:32:29


0

Establecer self.title = "" antes self.navigationController?.pushViewController(vc, animated: true).


6
let backButton = UIBarButtonItem() 

backButton.title = "name" 

self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton 

1

Prueba esto ... que va a funcionar ....

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    self.title = "" 
} 

El código anterior ocultar el texto y mostrar sólo la flecha hacia atrás en la barra de navegación.

+1

¡Esto definitivamente funciona! +1 09 feb. 182018-02-09 06:05:12


0
override func viewWillAppear(_ animated: Bool) { 

    self.tabBarController?.navigationItem.title = "Notes" 

    let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController)) 

    self.tabBarController?.navigationItem.rightBarButtonItem = sendButton 
} 

func goToNoteEditorViewController(){ 
    // action what you want 
} 

Hope it helps !! #swift 3


12

Si está utilizando el archivo xib para el controlador de vista, haga esto en su clase de controlador de vista.

class AboutUsViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    edgesForExtendedLayout = [] 
    setUpNavBar() 
} 

func setUpNavBar(){ 
    //For title in navigation bar 
    self.navigationController?.view.backgroundColor = UIColor.white 
    self.navigationController?.view.tintColor = UIColor.orange 
    self.navigationItem.title = "About Us" 

    //For back button in navigation bar 
    let backButton = UIBarButtonItem() 
    backButton.title = "Back" 
    self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton 
} 

} 

El resultado será:

enter image description here


0

Si usted está empujando un controlador de vista de la visualización Página controlador, no se puede actualizar el título botón atrás del mando de navegación. Para solucionar esto, cree un delegado en su controlador de vista principal (también puede recorrer la jerarquía del controlador de vista hasta el padre).

Además, los botones Atrás tienen un límite de caracteres. Si excede ese límite de caracteres, el sistema se configurará por defecto en "Atrás". No truncará para ti. Por ejemplo:

backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back". 
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is. 

1

Sólo puede modificar el NavigationItem en el guión gráfico

enter image description here

En el botón Volver añadir un espacio y pulse Intro.

Nota: Haga esto en el VC anterior.

no