Как установить текст кнопки возврата в Swift

138

Как удалить текст кнопки назад.

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

Ни один из них не работал:

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
Теги:

20 ответов

481
Лучший ответ

Кнопка "Назад" относится к контроллеру просмотра предыдущей, а не той, которая в настоящее время отображается на экране.
Чтобы изменить кнопку "Назад", вы должны обновить ее нажатием до, на контроллере представления, который инициировал сеанс:

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
}
  • 7
    Большое спасибо, вы не знаете, сколько часов я трачу только на эту маленькую деталь (предыдущий контроллер)
  • 3
    Если бы я мог поднять голос миллион раз, я бы. Не могу сказать, сколько времени я провел, задаваясь вопросом, почему он не работает (ранее был на контроллере назначения)
Показать ещё 11 комментариев
101

Вы можете сделать это из конструктора интерфейса следующим образом:

щелкните элемент навигации предыдущего контроллера просмотра

Изображение 1832

из инспектора атрибутов установите текст кнопки "Назад" на все, что вы хотите. Вот оно!

Изображение 1833

  • 1
    Какой лучший способ присвоить ноль?
  • 0
    @kennydust Вы имеете в виду пустой заголовок?
Показать ещё 12 комментариев
31

Текст обратной кнопки берется из заголовка элемента управления родительским представлением. Таким образом, все, что вы указали в предыдущем заголовке элемента управления View-Control, будет отображаться в тексте текущей кнопки контроллера. Вы можете просто поместить "" в качестве заголовка навигационного элемента в виде родительского вида viewWillAppear.

self.navigationItem.title = ""

Другой способ - поставить

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

в режиме просмотра текущего вида viewWillAppear. Это вызовет некоторые другие проблемы, если навигационный стек слишком вложен.

  • 3
    self.navigationItem.title = "" должен быть сверху как лучший ответ!
  • 0
    Я согласен с этим, так как это лучший ответ, потому что все ответы, приведенные выше, требуют добавления целевой функции к элементу навигации, поэтому они не просто изменяют текст, но и добавляют собственную функцию всплывающего окна, которая не требуется для вопроса!
Показать ещё 2 комментария
27

Если вы используете xib файл для контроллера представлений, сделайте это в своем классе контроллера вида.

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
}

}

Результат будет:

Изображение 1834

23

Я не знаю, где вы использовали свои методы, которые вы задали, но я мог бы получить желаемый результат, если я использую в своем классе ViewController (в котором я хочу изменить кнопку "Назад" ), на viewDidLoad(), следующая строка:

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

Результат будет:

До

Изображение 1835

После

Изображение 1836

  • 1
    В моем случае это сработало только если вы поместите этот кусок кода в метод viewDidAppear, а не в метод viewDidLoad
  • 2
    navigationController.navigationBar.topItem?.title = "" используйте navigationController.navigationBar.topItem?.title = "" чтобы не помещать это в viewDidAppear
21

Вы можете поместить эти 3 строки кода в свой override func viewDidLoad() {}.

let backButton = UIBarButtonItem()

backButton.title = "name"

self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton
  • 1
    Это решение кажется более правильным, поскольку вы помещаете логику в прибывающий ВК, а не в тот, из которого вы уходите. Ака: читает лучше.
15

Кнопка "Назад" принадлежит предыдущему контроллеру представления, а не тому, который в данный момент представлен на экране. Чтобы изменить кнопку "Назад", вы должны обновить ее перед нажатием, добавить viewdidload:

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

Вы можете просто изменить NavigationItem в раскадровке

Изображение 1837

В кнопку "Назад" добавьте пробел и нажмите Enter.

Примечание: сделайте это в предыдущем ВК.

8

Это должно работать:

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

Хотя это и не рекомендуется, поскольку фактически заменяет кнопку BackButton, а также убирает стрелку назад и жест смахивания.

  • 10
    не правильный способ сделать это, вы просто заменяете кнопку возврата
  • 0
    Лучше сделать это из конструктора интерфейса
5

Swift 4 - настройте кнопку возврата, прежде чем нажимать какие-либо контроллеры вида

// 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)
  • 1
    спасибо это сработало отлично
3

В viewDidLoad методе представляющего контроллера добавьте:

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

Использование Swift 4.2;

Если вы хотите изменить текст элемента кнопки обратной панели навигации (добавьте super.viewDidLoad())

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

Если вы хотите добавить текст заголовка панели навигации;

 self.title = "Navigation Bar Title"

Self → ViewController

1

Попробуй... это сработает....

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

Приведенный выше код скроет текст и отобразит только стрелку назад на панели навигации.

  • 1
    Это определенно работает! +1
0

Свифт 4

есть только один способ изменить текст в backButton программно из текущего viewController:

navigationController?.navigationBar.items![0].title = "some new text"
0

хотя эти ответы решают проблему, но это может быть полезным

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)

    }

}
0

Swift 4

В моем случае решение состояло в том, чтобы очистить элемент навигации Master View Controller, прежде чем переходить к Child View Controller. И установите его снова, если он будет показан снова

MasterController

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

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

И вот как я нажимаю UIViewController и очищаю элемент кнопки задней панели в дочернем контроллере:

MasterController

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

Если вы нажимаете контроллер просмотра со страницы просмотра страницы, вы не можете обновить заголовок кнопки управления навигационным контроллером. Чтобы решить эту проблему, создайте делегата обратно в родительский контроллер представления (вы также сможете переходить к иерархии диспетчера представлений вплоть до родителя).

Кроме того, кнопки "Назад" имеют ограничение символов. Если вы превысите этот предел символа, система по умолчанию будет "Назад". Это не урезает вас. Например:

backItem.title = "Birthdays/Anniversaries" // Get converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.
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
}

Надеюсь, это поможет! #swift 3

0

Установить self.title = "" до self.navigationController?.pushViewController(vc, animated: true).

0

Это потому, что вы должны сделать это в prepareForSegue вашего родителя viewController:

это должно сделать трюк:

// MARK: - Navigation

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

Приветствия

Ещё вопросы

Сообщество Overcoder
Наверх
Меню