Cambiar el título de navegación mediante programación

188

Tengo una barra de navegación con un título. Cuando hago doble clic en el texto para cambiarle el nombre, en realidad dice que es un elemento de navegación, por lo que podría ser eso.

Estoy tratando de cambiar el texto usando código, como:

declare navigation bar as navagationbar here
button stuff {
    navigationbar.text = "title"
}

Ese no es mi código, obviamente, solo muestra cómo funcionaría.

Entonces, cada vez que presiono el botón, quiero que cambie el título.

Creciente
fuente

Respuestas:

539

Cambia el título cambiando el título del controlador de vista que se muestra:

viewController.title = "some title"

Normalmente esto se hace a la vista, se cargó en el controlador de vista:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "some title"
}

Sin embargo, esto solo funciona si tiene su controlador de vista incrustado en un UINavigationController. Yo altamente recomiendo hacer esto en lugar de crear una barra de navegación. Si insiste en crear una barra de navegación usted mismo, puede cambiar el título haciendo lo siguiente:

navigationBar.topItem.title = "some title"
Drewag
fuente
1
ViewController.type no tiene un miembro llamado title. Ese es el error que recibo.
Aumento
2
No lo llamas directamente en la clase. Lo llamas en una instancia de una subclase de UIViewController
drewag
Sí, se ViewControllerrefiere a la clase misma. Debe hacer referencia a una instancia de ViewController. Desde un método en su clase, como viewDidLoad, puede hacerlo usando self. Si no conoce la diferencia entre una clase y una instancia, le recomiendo que aprenda de qué se trata. Este artículo te ayudará.
drewag
Funciona como un encanto en Xcode también ... solo un pequeño cambio -> self.title = @ "some title";
Resumen
self.title = "algún título" funcionó para mí. Gracias ! He estado intentando 'navigationController? .NavigationItem.title = "Some title". Realmente no estoy seguro de por qué no funciona. (Tengo un elemento de navegación allí, que coloqué para mostrar el título, además del controlador de navegación incorporado). Sigo pensando que debería funcionar, pero no sé por qué. ¡La pila se desborda al rescate una vez más!
Naishta
68

Pruebe lo siguiente en viewDidLoad

self.navigationItem.title = "Your Title"
Avi
fuente
1
Trabaja para mi. iOS 11.4
Antony Wong
13

El siguiente código me funciona con Xcode 7:

override func viewDidLoad() {        
    super.viewDidLoad()
    self.navigationItem.title = "Your Title"
}
grmonkeybiz
fuente
10

Encontré que esto funciona:

navigationItem.title = "Title"
AJ9
fuente
¿Cómo se centra el título en un controlador de vista que es hijo de un UINavigationController? Por alguna razón, el texto está alineado a la izquierda. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy
5

y también si intentas crear Navigation Barmanualmente este código te ayudará

func setNavBarToTheView() {
    let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 64.0))
    self.view.addSubview(navBar);
    let navItem = UINavigationItem(title: "Camera");
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(CameraViewController.onClickBack));
    navItem.leftBarButtonItem = doneItem;
    navBar.setItems([navItem], animated: true);
}
Aleksey Timoshchenko
fuente
4

Normalmente, la mejor práctica es establecer el título en UIViewController. Al hacer esto, UINavigationItemtambién se establece. En general, esto es mejor que asignar e inicializar mediante programación un enlace UINavigationBarque no esté vinculado a nada.

Te pierdes algunos de los beneficios y la funcionalidad para los que UINavigationBarfue diseñado. Aquí hay un enlace a la documentación que puede ayudarlo. Analiza las diferentes propiedades que puede establecer en la barra real y en a UINavigationItem.

Solo ten en cuenta:

  1. Pierde la funcionalidad del botón de retroceso (a menos que lo conecte usted mismo)
  2. El gesto incorporado de "arrastrar desde el lado izquierdo para deslizar hacia atrás" se pierde

UINavigationControllerSon tus amigos.

codificado
fuente
4

La respuesta correcta para las personas que usan sería

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your Text"
}
Kevin Singh
fuente
3

Swift 3

Creé una salida para el elemento de la barra de título de navegación que viene con la barra de navegación (desde el Explorador de objetos) en el guión gráfico. Luego demandé a la siguiente línea:

navigationBarTitleItem.title = "Hello Bar"
nyxee
fuente
2

Si desea cambiar el título de un controlador de vista secundario de un Controlador de vista de página que está incrustado en un controlador de navegación, se vería así:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}
Francojamesfan
fuente
1

Si tiene un NavigationControllerincrustado dentro de un TabBarControllerver a continuación:

super.tabBarController?.title = "foobar"

ingrese la descripción de la imagen aquí

Puede depurar problemas como este con scripts de depurador. Pruebe el pvc comando Chisel para imprimir cada vista visible / oculta en la jerarquía.

rustyMagnet
fuente
0

En Swift 4:

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Espero que ayude, saludos!

Radames E. Hernandez
fuente
2
Esta es solo la mitad de la respuesta aceptada. Además, si dices que nada cambió, ¿por qué publicarías algo? Por favor borrar.
Eric Aya
@ Moritz, ¿eres moderador o algo así? si dice Sí, lo eliminaré, si no, no lo eliminaré.
Radames E. Hernández el
1
¿Realmente lo dices ?, encima de mí hay 4 respuestas completamente iguales, entonces ¿por qué vienes conmigo y me dices que borre la mía? Soy un usuario de confianza que apoya a la comunidad, no voy solo repitiendo respuestas. Solo quería actualizar esta pregunta con una versión rápida actualizada.
Radames E. Hernández el
3
No hay nada actualizado en tu respuesta. Este es el mismo código que la respuesta aceptada, la parte "Normalmente esto se hizo a la vista se cargó" ...
Eric Aya
0

Prefiero usar self.navigationItem.title = "Your Title Here"over self.title = "Your Title Here"para proporcionar el título en la barra de navegación, ya que la barra de pestañas también se usa self.titlepara alterar su título. Deberías probar el siguiente código una vez.

Nota: es necesario llamar al ciclo de vida Super View antes de hacer cualquier cosa.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupNavBar()
    }
}

private func setupNavBar() {
    self.navigationItem.title = "Your Title Here"
}
Mukesh Shakya
fuente
0

Swift 5.1

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "What ever you want"
}
Marlhex
fuente
0

Swift 5.1

// Establecer el título de la barra de navegación mediante programación y dinámica

Nota: Primero agregue NavigationControllerItem a Your ViewControllerluego vaya a su ViewController.swiftarchivo y simplemente copie y pegue esto viewDidLoad().

navigationItem.title = "Your Title Here"

Raksha
fuente