Como definir o texto do botão Voltar no Swift


207

Como você remove o texto do botão Voltar.

Botão de retorno atual:

<Voltar

Botão voltar desejado:

<AnythingElse

Nenhuma delas funcionou:

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

Respostas:


604

O botão Voltar pertence ao controlador de exibição anterior , não ao apresentado atualmente na tela.
Para modificar o botão Voltar, você deve atualizá-lo antes de pressionar, no controlador de exibição que iniciou o seguinte:

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, 4 e 5:

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

OU

// in your viewDidLoad or viewWillAppear
navigationItem.backBarButtonItem = UIBarButtonItem(
    title: "Something Else", style: .plain, target: nil, action: nil)

9
Muito obrigado, você não sabe quantas horas eu gasto apenas para esse pequeno detalhe (o controlador anterior)
Ricardo

3
Se eu pudesse votar um milhão de vezes, faria. Não posso te dizer quanto tempo eu passei perguntando por que ele não estava funcionando (foi anteriormente no controlador de destino)
Dylan Ireland

13
"O botão voltar pertence ao controlador de exibição anterior", que é a resposta mais valiosa que eu encontrei sobre esse tópico! Obrigado!
Vhristoskov #

1
Definir as titlealterações no título , não apenas no botão Voltar.
Yariv Nissim

4
Eu adicionei self.navigationController .navigationBar.topItem .backBarButtonItem = backItem vez de navigationItem.backBarButtonItem = backItem e ele funciona muito bem em Swift 3. Obrigado!
Indra Adam

125

Você pode fazer isso no construtor de interface da seguinte maneira:

clique no item de navegação do controlador de exibição anterior

insira a descrição da imagem aqui

no inspetor de atributos, defina o texto do botão Voltar para o que quiser. É isso aí!!

insira a descrição da imagem aqui


1
qual é a melhor maneira de atribuir 'zero'?
Kennydust

@kennydust Você quer dizer título em branco?
Ajinkya Patil

8
@kennydust sim no espaço add botão voltar e pressione enter
Ajinkya Patil

Fácil e agradável, mas é localizável?
Gruntcakes

2
@AjinkyaPatil Eu tentei isso, mas o botão Voltar não aparece. Alguma razão para que isso possa ser?
precisa saber é o seguinte

48

O texto do botão Voltar é obtido do título do item de navegação do controlador de exibição pai. Portanto, o que você definir no título do item de navegação do controlador de exibição anterior será mostrado no texto do botão de volta do controlador de exibição atual. Você pode apenas "" colocar o título do item de navegação no método viewWillAppear do controlador-pai.

self.navigationItem.title = ""

Outra maneira é colocar

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

no método viewWillAppear do controlador de exibição atual. Este causará algum outro problema se a pilha de navegação estiver muito aninhada.


5
self.navigationItem.title = "" deve estar no topo como a melhor resposta!
rilar

Eu concordo com isso, pois a melhor resposta faz com que todas as respostas acima exijam a adição de uma função de destino ao item de navegação; portanto, elas não mudam apenas o texto, mas também adicionam uma função pop personalizada, o que não é exigido pela pergunta!
IsPha

Isso funciona bem prepareForSegue, o que é. um pouco mais limpo, porque você não está alterando o novo viewController após o carregamento.
Adrian

Preste atenção!!! coloque self.title = "....." antes da chamada para self.navigationItem.title = ""
Bary Levy

45

Você pode colocar essas 3 linhas de código noViewController botão que deseja alterar o título do botão Voltar.

No seu override func viewDidLoad() {}.

let backButton = UIBarButtonItem()
backButton.title = "My Back Button Title"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

2
Essa solução parece mais correta, pois você coloca a lógica no VC que chega e não no VC que está saindo. Aka: lê melhor.
eonist

37

Se você estiver usando o arquivo xib para o view controller, faça isso na sua classe do view controller.

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
}

}

O resultado será:

insira a descrição da imagem aqui


29

Eu não sei onde você usou seus métodos que você colocou na sua pergunta, mas eu poderia obter o resultado desejado se eu usasse, na minha ViewControllerclasse (na qual desejo alterar o botão voltar), na viewDidLoad()função, a seguinte linha:

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

O resultado será:

Antes

insira a descrição da imagem aqui

Depois de

insira a descrição da imagem aqui


3
No meu caso, só funcionava se você colocar este pedaço de código no método viewDidAppear e não a viewDidLoad um
apinho

2
Use navigationController.navigationBar.topItem?.title = ""em vez de evitar colocar isso emviewDidAppear
José

Essa parece ser a maneira mais satisfatória e evita um flash, pois o título do botão Voltar é alterado para "" usando self.navigationItem.title = "" no controlador de chamada (dispositivos mais lentos). Além disso, a outra situação em que self.navigationItem.title = "" é completamente ignorada, fazendo a transição intermitente rapidamente para o controlador de exibição por meio de um comutador de guias do controlador de tabulação programaticamente.
FlimFlam Vir

22

O botão Voltar pertence ao controlador de exibição anterior, não ao apresentado atualmente na tela. Para modificar o botão Voltar, você deve atualizá-lo antes de pressionar, adicione viewdidload:

Swift 4:

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

12

Você pode apenas modificar o NavigationItem no storyboard

insira a descrição da imagem aqui

No botão Voltar, adicione um espaço e pressione Enter.

Nota: Faça isso no VC anterior.


8

Swift 4 - Configure o botão Voltar antes de pressionar qualquer controlador de exibição

// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()

// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)

8

Isso deve 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)
}

Embora não seja recomendado, pois na verdade substitui o backButton e também removeu a seta para trás e o gesto de furto.


10
não é o caminho certo para fazê-lo, você está apenas substituindo o botão voltar
Yariv Nissim

Melhor fazê-lo a partir do construtor de interface
Rutger Huijsmans

7

Swift 4.2

Se você quiser alterar o texto do item do botão Voltar da barra de navegação, insira-o no viewDidLoadcontrolador ANTES daquele em que o botão Voltar aparece, NÃO no controlador de visualização em que o botão Voltar está visível.

 let backButton = UIBarButtonItem()
 backButton.title = "New Back Button Text"
 self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

Se você deseja alterar o texto do título da barra de navegação atual, use o código abaixo (observe que este se torna o texto de volta padrão da visualização NEXT pressionada no controlador de navegação, mas esse texto de volta padrão pode ser substituído pelo código acima)

 self.title = "Navigation Bar Title"

6

Existem duas maneiras.

1.No previousViewController.viewDidLoad ()

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem

2.No currentViewController.viewDidAppear ()

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"      
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem

Razão: backButtonvem navigationBar.backItem.backBarButtonItem, portanto, a primeira maneira é óbvia. No currentViewController.viewDidLoad (), não podemos obter a referência de backItem, porque em viewDidAppear (), o navigationBarpressionado navigationViewé stack. Assim, podemos fazer alterações nobackItem no currentViewController. viewDidAppear ()

Para mais detalhes, você pode ver o documento: UINavigationBar


3

No viewDidLoadmétodo do controlador de apresentação, adicione:

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

2

embora essas respostas resolvam o problema, mas isso pode ser útil

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

2

Swift 4

Enquanto o ditado anterior para se preparar para segue está correto e é verdade que o botão voltar pertence ao VC anterior, é apenas adicionar um monte de código mais desnecessário.

A melhor coisa a fazer é definir o título do VC atual em viewDidLoad e definirá automaticamente o título do botão voltar corretamente no próximo VC. Essa linha funcionou para mim

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

2

Isso funciona para o Swift 5 :

self.navigationItem.backBarButtonItem?.title = ""

Observe que será eficaz para o próximo controlador de exibição pressionado, e não o atual no visor, por isso é muito confuso!

Além disso, verifique o storyboard e selecione o item de navegação do controlador de exibição anterior e digite algo no botão Voltar (Inspetor).


1

Tente isso ... vai funcionar ....

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

O código acima oculta o texto e mostra apenas a seta para trás na barra de navegação.


0

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


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
}

Espero que ajude!! #swift 3


0

Se você estiver pressionando um controlador de visualização da página do controlador de visualização de página, não poderá atualizar o título do botão Voltar do controlador de navegação. Para resolver isso, crie um delegado de volta ao seu controlador de exibição pai (você também poderá atravessar a hierarquia do controlador de exibição no pai).

Além disso, os botões Voltar têm um limite de caracteres. Se você exceder esse limite de caracteres, o sistema assumirá o padrão "Voltar". Não será truncado para você. Por exemplo:

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

0

Swift 4

No meu caso, a solução foi limpar o item de navegação do Master View Controller antes de passar para o Child View Controller. E configure-o novamente se for mostrado novamente

MasterController

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.title = ""
}

E é assim que eu empurro um UIViewController e limpo o item do botão da barra traseira no controlador filho:

MasterController

let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)

0

para Swift 4.2

let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem

0

GOTCHA: Se você está tendo problemas com qualquer um dos muitos-estrelou sugestões, verifique se você está registrando suas UITableViewCells em viewDidLoad(), não deinit()


-1

Solução verificada e funciona no Swift 5

Abaixo, coloquei algumas soluções para casos diferentes:

1. Remova o texto do botão Voltar

A melhor solução para remover o texto do botão Voltar é adicionar viewDidLoad ():

navigationItem.backBarButtonItem = UIBarButtonItem()

2. Defina o próprio texto no botão Voltar

Caso você queira definir seu próprio título, faça-o definindo o título de backButton:

let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem

3. Botão traseiro vazio em todos os VC

Se você deseja criar estilo comum em todo o aplicativo - para retornar a seta sem texto, crie um VC base para todos os seus Controladores de exibição:

class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

A solução apresentada acima permite personalizar o botão voltar no futuro, se você quiser fazer alguma exceção posteriormente, adicionando variável adicional e substituindo-a no ViewController específico, f.ex:

class BaseViewController: UIViewController {

    var customBackButtonTitle: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        var backButton = UIBarButtonItem()
        if let text = customBackButtonTitle {
            backButton.title = text
        }
        navigationItem.backBarButtonItem = backButton
    }
}

-2

veloz 4

existe uma maneira de alterar o texto em backButton programaticamente a partir do viewController atual:

navigationController?.navigationBar.items![0].title = "some new text"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.