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


118

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

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 
394

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

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 
} 
+5

Спасибо большое , вы не знаете, сколько часов я трачу только за эту небольшую деталь (предыдущий контроллер). 07 фев. 162016-02-07 16:29:56

+3

Если бы я мог увеличить миллион раз, я бы это сделал. Не могу сказать, как долго я размышлял о том, почему он не работал (ранее был на контроллере назначения) 24 май. 162016-05-24 21:18:34

+6

«Кнопка назад принадлежит предыдущему контроллеру представления» - это самый ценный ответ, который я нашел по этой теме! Спасибо! 01 дек. 162016-12-01 14:38:25

  0

Я думаю, это нормально, чтобы установить его таким образом. Но я рекомендую вам, если возможно, установить 'title' вашего предыдущего' viewController' в стеке навигации. Это гораздо лучший подход. 10 апр. 172017-04-10 16:37:30

+1

Установка 'title' изменяет * заголовок *, а не только кнопку« Назад ». 11 апр. 172017-04-11 00:39:28

+1

Я добавил self.navigationController! .navigationBar.topItem! .backBarButtonItem = backItem вместо навигацииItem.backBarButtonItem = backItem, и он отлично работает на Swift 3. Спасибо 06 май. 172017-05-06 10:35:50

  0

Спасибо большое, это правильный ответ. 15 июн. 172017-06-15 12:54:51

  0

Это право на это. Кроме того, я хотел бы указать, если вы не используете segue для выпадающих представлений, он все равно работает до тех пор, пока вы меняете backBarButtonItem, прежде чем выходить из вашего представления. 29 июн. 172017-06-29 03:18:25

+1

Интересно, если вы хотите, чтобы название было ничем, вы должны установить его в "", а не в "". «» оставляет много места, вторгаясь в заголовок. 12 авг. 172017-08-12 00:05:01

+1

Он также работает в 'viewDidLoad'. 18 окт. 172017-10-18 16:24:32

  0

это единственное решение, которое сработало для меня. Большое спасибо 11 ноя. 172017-11-11 22:43:02


7

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

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

не правильный способ сделать это, вы просто заменить кнопку назад 29 авг. 152015-08-29 09:14:40

  0

Лучше сделать это из интерфейса строитель 10 май. 162016-05-10 12:49:11


0

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

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

// MARK: - Navigation 

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

Приветствие

+4

Это обновит название на контроллере представления, а не только кнопку Назад 29 авг. 152015-08-29 09:21:58


76

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

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

enter image description here

от инспектора атрибутов установил текст кнопки «Назад» в любое удобное для вас положение. Thats it !!

enter image description here

+1

Какой лучший способ назначить 'nil'? 05 апр. 162016-04-05 00:13:47

  0

@kennydust Вы хотите ввести в заголовок? 05 апр. 162016-04-05 03:10:17

  0

есть. есть ли способ создания интерфейса? 05 апр. 162016-04-05 23:00:05

+5

@kennydust yes в задней кнопке добавить пробел и нажать enter 06 апр. 162016-04-06 12:11:49

  0

Ницца и легко, но это локализуемо? 27 май. 162016-05-27 19:35:14

  0

@ ThePumpingLama при локализации раскадровки автоматически локализуется 28 май. 162016-05-28 14:51:49

+1

@AjinkyaPatil Я пробовал это, но кнопка «Назад» не появляется. Любая причина, почему это может быть? 01 июн. 162016-06-01 22:11:31

  0

@ user805981 - это текст кнопки с обратной стороны? 02 июн. 162016-06-02 06:57:51

  0

@AjinkyaPatil no is not 03 июн. 162016-06-03 14:45:04

  0

@ user805981 У вас есть кнопка кнопки возврата назад к тому же контроллеру представления или предыдущему контроллеру представления, из которого вы нажимаете контроллер просмотра? 03 июн. 162016-06-03 14:54:19

  0

@AjinkyaPatil Да, у меня есть. Все еще не работает. У вас есть пример github? Благодаря! 15 июн. 162016-06-15 21:59:51

+3

Это намного чище, чем принятый ответ IMO. 15 ноя. 162016-11-15 01:19:31


24

Back-кнопка текст взят из названия навигации родительского пункта View-контроллера. Таким образом, все, что вы указали в предыдущем заголовке элемента управления view-controller, будет отображаться в тексте обратной кнопки текущего контроллера. Вы можете просто поместить «» в качестве заголовка навигационного элемента в виде viewAllppear.

self.navigationItem.title = "" 

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

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

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

+1

self.navigationItem.title = "" должен быть сверху как лучший ответ! 07 май. 162016-05-07 16:45:11

  0

Я согласен с этим, так как лучший ответ, потому что все ответы выше требуют добавления целевой функции к элементу навигации, поэтому они не просто меняют текст, но также добавляют пользовательскую функцию pop, что не требуется в вопросе! 17 янв. 172017-01-17 08:03:05


3

В viewDidLoad способе представляя контроллер оных:

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

10

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

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

20

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

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

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

до

enter image description here

После

enter image description here

+1

В моем случае это работает, только если вы поместите этот фрагмент кода в метод viewDidAppear, а не в viewDidLoad один 11 окт. 172017-10-11 13:32:29


0

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


6
let backButton = UIBarButtonItem() 

backButton.title = "name" 

self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton 

1

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

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

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

+1

Это определенно работает! +1 09 фев. 182018-02-09 06:05:12


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


12

Если вы используете 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 
} 

} 

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

enter image description here


0

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

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

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

1

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

enter image description here

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

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