Alterando o título da navegação programaticamente

188

Eu tenho uma barra de navegação com um título. Quando clico duas vezes no texto para renomeá-lo, ele realmente diz que é um item de navegação, então pode ser isso.

Estou tentando alterar o texto usando o código, como:

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

Esse não é meu código, obviamente, apenas mostrando como funcionaria.

Então, sempre que eu pressionar o botão, quero que o título mude.

Aumentar
fonte

Respostas:

539

Você altera o título alterando o título do controlador de exibição que está sendo exibido:

viewController.title = "some title"

Normalmente, isso é feito no modo de exibição que foi carregado no controlador de exibição:

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

No entanto, isso só funciona se você tiver seu controlador de exibição incorporado em um UINavigationController. Eu altamente recomendo fazer isso em vez de criar uma barra de navegação si mesmo. Se você insistir em criar uma barra de navegação, poderá alterar o título fazendo:

navigationBar.topItem.title = "some title"
drewag
fonte
1
ViewController.type não possui um membro chamado title. Esse é o erro que recebo.
Aumento
2
Você não liga diretamente para a turma. Você chamá-lo em uma instância de uma subclasse de UIViewController
drewag
Sim, ViewControllerrefere-se à própria classe. Você precisa se referir a uma instância de ViewController. De dentro de um método em sua classe, como viewDidLoad, você pode fazê-lo usando self. Se você não sabe a diferença entre uma classe e uma instância, eu recomendo que você aprenda o que é. Este artigo irá ajudar.
drewag
Funciona como um encanto no Xcode também .. apenas uma pequena mudança -> self.title = @ "some title";
Resumo
self.title = "some title" funcionou para mim. Obrigado ! Eu tenho tentado 'navigationController? .NavigationItem.title = "Some title". realmente não sei por que não funciona. (Eu tenho um item de navegação que coloquei para exibir o título, além do controlador de navegação incorporado). Ainda acho que deve funcionar, mas não sei por quê. Estouro de pilha para o resgate mais uma vez!
Naishta
68

Tente o seguinte em viewDidLoad

self.navigationItem.title = "Your Title"
Avi
fonte
1
Trabalhe para mim. iOS 11.4
Antony Wong
13

O código abaixo funciona para mim com o Xcode 7:

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

Eu achei que isso funcionava:

navigationItem.title = "Title"
AJ9
fonte
Como você centraliza o título em um controlador de exibição que é filho de um UINavigationController? Por alguma razão, o texto está alinhado à esquerda. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy
5

e também se você tentar criar Navigation Barmanualmente, esse código o ajudará

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
fonte
4

Normalmente, a melhor prática é definir o título no UIViewController. Ao fazer isso, o UINavigationItemtambém é definido. Geralmente, isso é melhor do que alocar e inicializar programaticamente um UINavigationBarque não está vinculado a nada.

Você perde alguns dos benefícios e funcionalidades para os quais UINavigationBarfoi projetado. Aqui está um link para a documentação que pode ajudá-lo. Ele discute as diferentes propriedades que você pode definir na barra real e no UINavigationItem.

Lembre-se:

  1. Você perde a funcionalidade do botão Voltar (a menos que você o conecte)
  2. O gesto incorporado "arrastar do lado esquerdo para deslizar para trás" é perdido

UINavigationControllerSão seus amigos.

codeblooded
fonte
4

A resposta correta para pessoas que usam seria

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

Swift 3

Eu criei uma saída para o item da barra de título de navegação que acompanha a barra de navegação (do Pesquisador de objetos) no storyboard. Então eu processei a linha abaixo:

navigationBarTitleItem.title = "Hello Bar"
nyxee
fonte
2

Se você quisesse alterar o título de um controlador de exibição filho de um Page View Controller incorporado a um controlador de navegação, seria assim:

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

Se você tiver um NavigationControllerincorporado dentro de um TabBarControllerveja abaixo:

super.tabBarController?.title = "foobar"

insira a descrição da imagem aqui

Você pode depurar problemas como este com scripts de depurador. Experimente o pvc comando Chisel para imprimir todas as visualizações visíveis / ocultas na hierarquia.

rustyMagnet
fonte
0

No Swift 4:

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Espero que ajude, cumprimentos!

Radames E. Hernandez
fonte
2
Esta é apenas metade da resposta aceita. Além disso, se você diz que nada mudou, por que postaria alguma coisa ?! Por favor delete.
Eric Aya
@Moritz você é moderador ou algo assim? se disser Sim, eu o excluirei; caso contrário, não o excluirei.
Radames E. Hernandez
1
Você realmente diz isso ?, acima de mim, existem 4 respostas completamente iguais; então, por que você vem comigo e me diz para apagar as minhas? Eu sou um usuário confiável que apóia a comunidade, não estou apenas repetindo respostas. Eu só queria atualizar esta pergunta com uma versão rápida atualizada.
Radames E. Hernandez
3
Não há nada atualizado na sua resposta. Este é o mesmo código que a resposta aceita, o “Normalmente isso é feito em vista fez carga” parte ...
Eric Aya
0

Eu prefiro usar self.navigationItem.title = "Your Title Here"over self.title = "Your Title Here"para fornecer título na barra de navegação, pois a barra de guias também usa self.titlepara alterar seu título. Você deve tentar o seguinte código uma vez.

Nota: é necessário chamar o ciclo de vida do super view antes de fazer qualquer material.

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

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

Swift 5.1

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

Swift 5.1

// Definir título da barra de navegação programaticamente e dinâmico

Nota: Primeiro adicione NavigationControllerItem ao Your, em ViewControllerseguida, vá para o ViewController.swiftarquivo e basta copiar e colar viewDidLoad().

navigationItem.title = "Your Title Here"

Raksha.
fonte