iPhone: Configurando o Título da Barra de Navegação

86

Olá a todos. Ainda sou muito novo no desenvolvimento do iPhone e estou tendo problemas para descobrir como alterar o título da minha barra de navegação. Em outra pergunta neste site, alguém recomendou usar:

viewController.title = @"title text";

mas isso não está funcionando para mim ... Preciso adicionar um UINavigationController para fazer isso? Ou talvez apenas uma saída da minha subclasse UIViewController? Se ajudar, defini a barra de navegação no IB e estou tentando definir seu título na minha subclasse UIViewController. Essa é mais uma daquelas coisas simples que me dão dor de cabeça. Colocando self.title = @ "texto do título"; em viewDidLoade initWithNibNamenão funcionou também. Alguém sabe o que está acontecendo e como fazer acontecer da maneira certa?

Obrigado!

Arthur Skirvin
fonte

Respostas:

154

O controlador de visualização deve ser filho de algum UINavigationController para que a .titlepropriedade tenha efeito. Se o UINavigationBar for simplesmente uma visualização, você precisa enviar um item de navegação contendo o título ou modificar o último item de navegação:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

ou

bar.topItem.title = @"title text";
Kennytm
fonte
8
Uau. Passei seriamente a última hora navegando em fóruns e documentação tentando descobrir isso, e me convenci de que seria mais complexo do que isso. Este código é tão simples e não precisei refazer nada no IB. Perfeito! KennyTM, você é demais. Se bem me lembro, você também respondeu à minha pergunta NSDate e me colocou para pesquisar dicionários. Você é minha nova pessoa favorita neste site. Muito obrigado por toda sua ajuda!
Arthur Skirvin
5
seu comentário me fez sorrir e me perguntar: alguém já fez amigos aqui no SO, alguma vez? normalmente todos aqui são muito úteis, mas não parecem expressar quaisquer emoções humanas (exceto o
questionador
Veja a resposta de Sorin para uma solução compatível com storyboard.
devios1
Obrigado pela sua resposta que realmente me economiza muito tempo. :) @kennytm
jerry_sjtu
123

se você estiver fazendo tudo por código no viewDidLoadmétodo do, UIViewControllervocê só deve adicionarself.title = @"title text";

algo assim:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

você também pode tentar self.navigationItem.title = @"title";

também verifique se seu NavigationItem não é nulo e se você definiu um plano de fundo personalizado para a barra de navegação, verifique se o título está definido sem ele.

Sorin Antohi
fonte
@ SorinA, obrigado. É a melhor forma de atribuir o título da barra de navegação.
Tirth,
33

Há um problema em usar self.title = @"title";

Se você estiver usando a barra de navegação junto com a barra de guias, a linha acima também altera o rótulo do item da barra de guias. Para evitar isso, use o que @testing sugeriu

self.navigationItem.title = @"MyTitle";
Jigish
fonte
12

Se você quiser alterar o título da barra de navegação (não o título do botão de voltar da barra de navegação!), Este código funcionará.

self.navigationController.topViewController.title = @"info";
M.Gökay Borulday
fonte
9

Se você deseja alterar o título de um navBar dentro de um controlador tabBar, faça o seguinte:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}
Pantelis Proios
fonte
viewDidAppear fez o truque para mim depois de 2 horas tentando resolver isso. Obrigado :)
Tchelow
topItem.title pode ou não ser o título da barra de navegação. Se for a tela de nível superior sem botão Voltar, ela definirá o título. Mas se você tiver um botão Voltar, topItem.title é na verdade o título do botão Voltar.
user2962499
5

No meu aplicativo de navegação, eu faço o seguinte:

myViewController.navigationItem.title = @"MyTitle";
testando
fonte
4

Eu tinha um controlador de navegação integrado em um TabbarController. Funcionou

self.navigationItem.title=@"title";
Sagar Dalwale
fonte
4

Por padrão, o controlador de navegação exibe o título do 'item superior'

então, em seu método viewdidload de seu appdelegate você pode. Eu testei e funciona

navController.navigationBar.topItem.title = @"Test";
ronaldus_magnus
fonte
2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Este código funcionou.

rmsh
fonte
Bem-vindo ao SO e obrigado pela postagem. É melhor postar essas informações como um comentário, por favor, dê uma olhada em Como responder para mais informações.
Serge Belov
2

Se estiver trabalhando com Storyboards, você pode clicar no controlador, alternar para a guia de propriedades e definir o texto do título lá.

Cara
fonte
1

Acho que você precisa de um título dinâmico, por isso não o define no IB.

E eu presumo que seu objeto viewController é aquele especificado no NIB?

Talvez tentando defini-lo com um valor fictício em IB e, em seguida, depurar os métodos para ver qual controlador tem o valor fictício - supondo que apareça como o título ...

Chris Kimpton
fonte
1

De dentro do seu TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Blá, blá, que título incrível";

OneInABajilian
fonte
1

Para todos os seus Swift-ers por aí, isso funcionou perfeitamente para mim. É também uma das maneiras mais curtas de definir o título:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
kbpontius
fonte