Як встановити текст кнопки повернення в Swift


207

Як видалити текст кнопки "Назад".

Поточна кнопка "Назад":

<Назад

Бажана кнопка повернення:

<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

Відповіді:


604

Кнопка "Назад" належить попередньому контролеру перегляду, а не тій, що в даний час представлена ​​на екрані.
Щоб змінити кнопку "Назад", слід оновити її перед натисканням на контролері перегляду, який ініціював вираз:

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
}

Швидкий 3, 4 і 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
}

АБО

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

9
Велике спасибі, ви не знаєте, скільки годин я витрачаю саме на цю маленьку деталь (попередній контролер)
Рікардо

3
Якби я міг би підняти мільйон разів, я би. Не можу сказати, як довго я цікавився, чому це не працює (раніше був на контролері призначення)
Ділан Ірландія

13
"Кнопка" назад "належить попередньому контролеру перегляду", це найцінніша відповідь, яку я знайшов у цій темі! Дякую!
vhristoskov

1
Встановлення titleзміни заголовок , а не лише кнопку назад.
Ярів Ніссім

4
Я додав self.navigationController .navigationBar.topItem .backBarButtonItem = backItem замість navigationItem.backBarButtonItem = backItem і вона відмінно працює на Swift 3. Спасибі!
Індра Адам

125

Ви можете зробити це за допомогою конструктора інтерфейсів наступним чином:

натисніть на елемент навігації попереднього контролера перегляду

введіть тут опис зображення

від інспектора атрибутів встановіть текст кнопки повернення до потрібного. Це воно!!

введіть тут опис зображення


1
який найкращий спосіб призначити "нуль"?
kennydust

@kennydust Ви маєте на увазі пусту назву?
Ajinkya Patil

8
@kennydust так, у кнопці "назад" додайте пробіл та натисніть клавішу Enter
Ajinkya Patil

Приємно і легко, але чи це локалізація?
Gruntcakes

2
@AjinkyaPatil Я спробував це, але кнопка "Назад" не відображається. Будь-яка причина, чому це може бути?
користувач805981

48

Текст кнопки "назад" взято з назви елемента навігаційного контролера батьківського перегляду. Отже, все, що ви встановили на заголовку елемента навігації попереднього контролера перегляду, буде відображено у тексті кнопки "назад" контролера подання. Ви можете просто поставити "" як заголовок елемента навігації в метод батьківського перегляду контролера viewWillAppear.

self.navigationItem.title = ""

Інший спосіб - поставити

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

у поточному режимі подання контролера viewWillAppear. Ця проблема спричинить інші проблеми, якщо навігаційний стек занадто вкладений.


5
self.navigationItem.title = "" має бути найкращим варіантом!
rilar

Я погоджуюся з цим як найкращою відповіддю, оскільки всі відповіді вище вимагають додати цільову функцію до елемента навігації, тому вони не просто змінюють текст, але додають також власну функцію попсу, що цього не вимагає!
IsPha

Це добре працює prepareForSegue, що є. трохи чистіше, оскільки ви не змінюєте новий viewController після завантаження.
Адріан

Звернути увагу!!! ставити self.title = "....." перед закликом до self.navigationItem.title = ""
Барі Леві

45

Ви можете помістити цей 3 рядок коду вViewController потрібне для зміни заголовка кнопки "Назад".

У вашому override func viewDidLoad() {}.

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

2
Це рішення здається більш правильним, оскільки ви вводите логіку в приїжджаючий ВК, а не на VC, який ви залишаєте. Ака: читає краще.
еоніст

37

Якщо ви використовуєте файл 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
}

}

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

введіть тут опис зображення


29

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

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

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

До цього

введіть тут опис зображення

Після

введіть тут опис зображення


3
У моєму випадку це спрацювало лише в тому випадку, якщо ви розмістили цей фрагмент коду на методі viewDidAppear, а не viewDidLoad one
apinho

2
Використовуйте navigationController.navigationBar.topItem?.title = ""натомість, щоб уникнути цьогоviewDidAppear
Хосе

Це здається найбільш задовільним способом і дозволяє уникнути спалаху, оскільки заголовок кнопки "назад" змінено на "" за допомогою self.navigationItem.title = "" у викличному контролері (повільніші пристрої). Також інша ситуація, коли self.navigationItem.title = "" повністю ігнорується, періодично швидко переходячи в контролер перегляду через перемикач вкладки контролера вкладки.
FlimFlam Vir

22

Кнопка "Назад" належить попередньому контролеру перегляду, а не тій, що в даний час представлена ​​на екрані. Щоб змінити кнопку назад, слід оновити її перед натисканням, додайте viewdidload:

Швидкий 4:

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

12

Ви можете просто змінити NavigationItem на розкладі

введіть тут опис зображення

На кнопці "Назад" додайте пробіл і натисніть Enter.

Примітка. Зробіть це в попередньому ПК.


8

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)

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
це не правильний спосіб зробити це, ви просто замінюєте кнопку "назад"
Ярів Ніссім

Краще зробити це у
конструктора

7

Швидкий 4.2

Якщо ви хочете змінити текст елемента кнопки повернення на панелі навігації, введіть це в viewDidLoadконтролер ДО того, де відображається кнопка "Зворотно", НЕ на контролері перегляду, де видно кнопку назад.

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

Якщо ви хочете змінити текст заголовка поточної навігаційної панелі, скористайтеся наведеним нижче кодом (зауважте, що це стає типовим зворотним текстом для перегляду NEXT, натиснутого на контролер навігації, але цей зворотній текст за замовчуванням може бути замінений кодом вище)

 self.title = "Navigation Bar Title"

6

Є два способи.

1.В попередньомуViewController.viewDidLoad ()

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

2.У поточномуViewController.viewDidAppear ()

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

Причина: backButtonзвідси виходить navigationBar.backItem.backBarButtonItem, тому перший спосіб очевидний. У поточномуViewController.viewDidLoad () ми не можемо отримати посилання на нього backItem, тому що в viewDidAppear () navigationBarнатиснуто navigationViewна нього. Тому stackми можемо внести зміни до backItemпоточногоViewController. viewDidAppear ()

Більш детально ви можете ознайомитись з документом Document: UINavigationBar


3

У viewDidLoadспосіб представлення контролера додають:

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

2

Хоча ці відповіді вирішують проблему, але це може бути корисним

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

Швидкий 4

Хоча попередня приказка для підготовки до Segue є правильною, і її правда, кнопка "назад" належить попередньому VC, її лише додавання ще непотрібного коду.

Найкраще зробити це - встановити заголовок поточного ВК у viewDidLoad, і він автоматично встановить заголовок кнопки "Назад" правильно на наступному VC. Ця лінія працювала для мене

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

2

Це працює для Swift 5 :

self.navigationItem.backBarButtonItem?.title = ""

Зверніть увагу: він буде ефективним для наступного натиснутого контролера перегляду, а не для поточного на дисплеї, тому це дуже заплутано!

Також перевірте дошку та виберіть елемент навігації попереднього контролера перегляду, а потім введіть щось у кнопці "Назад" (Ревізор).


1

Спробуйте це ... це спрацює ....

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

Наведений вище код приховає текст і на панелі навігації відображатиметься лише стрілка назад.


0

Встановити self.title = "" раніше 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
}

Сподіваюся, це допомагає !! #swift 3


0

Якщо ви натискаєте на контролер перегляду зі сторінки контролера перегляду сторінок, ви не можете оновити назву кнопки повернення навігаційного контролера. Щоб вирішити це, створіть делегата назад до свого батьківського контролера перегляду (ви також можете перейти до ієрархії контролера перегляду назад до батьківського).

Крім того, кнопки Назад мають обмеження символів. Якщо ви перевищите це обмеження символів, система за замовчуванням буде "Назад". Він не стане для вас усіченим. Наприклад:

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

0

Швидкий 4

У моєму випадку рішенням було очищення елемента навігації контролера Master View перед тим, як перейти до дочірнього контролера. І встановіть його знову, якщо воно буде показане ще раз

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

GOTCHA: Якщо у вас виникли проблеми з будь-якою з багатьох зірок, переконайтеся, що ви реєструєте свої UITableViewCellв viewDidLoad(), а не відinit()


-1

Рішення перевірено і працювати в Swift 5

Нижче я поклав кілька рішень для різних випадків:

1. Видаліть текст із кнопки "назад"

Найкраще рішення для видалення тексту із кнопки "Назад" - додавання у viewDidLoad ():

navigationItem.backBarButtonItem = UIBarButtonItem()

2. Встановити власний текст на кнопці "назад"

Якщо ви хочете встановити власний заголовок, зробіть це, встановивши заголовок backButton:

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

3. Порожню кнопку назад на всіх VC

Якщо ви хочете створити загальний стиль у всьому додатку - просто повернути стрілку без тексту, створіть базовий VC для всіх своїх контролерів перегляду:

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

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

Рішення, представлене вище, дозволить вам налаштувати кнопку повернення в майбутньому, якщо ви хочете зробити якийсь виняток пізніше, додавши додаткову змінну і перезазначивши її в конкретному ViewController, 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

стрімкий 4

є один із способів змінити текст у backButton програмно з поточного viewController:

navigationController?.navigationBar.items![0].title = "some new text"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.