Удалить текст с кнопки «Назад», удерживая значок

Я хочу удалить текст с помощью кнопки «Назад», но хочу сохранить значок. я пытался

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil) navigationItem.leftBarButtonItem = backButton 

Однако это полностью удаляет текст и значок.

Метод @ rmd2 почти прав, но вместо этого вы должны выбрать навигационную панель controllerа, на которую будет обращена кнопка возврата, и введите " " в поле «Назад».

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

Я знаю, что у этого уже есть ответ, но вы также можете сделать это в коде (в случае, если вы работаете с наконечниками)

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

Добавьте вышеописанное в controller первого представления.

Обратите внимание, что вам нужно сделать это для каждого controllerа, который нажимает. Поэтому, если у вас есть 3 controllerа вида, и вы хотите удалить задний текст из всех них, вам нужно будет добавить строку в controller 1 и 2 вида.

Если вы хотите удалить заголовок кнопки «Назад» с помощью толкаемого controllerа вида, скажем, to < in subSettingsViewController, тогда вы должны установить заголовок backBarButtonItem в методе viewViewWisappear () в ConfigurationViewController .

Objective-C:

 - (void)viewWillDisappear:(BOOL)animated [super viewWillDisappear:animated]; self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil]; } 

Swift:

 override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) } 

Текст кнопки «Назад» зависит от названия основного вида.

Хитрость заключается в том, чтобы очистить заголовок, если главный вид исчезнет и снова установите его, если он снова показан:

 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) // needed to clear the text in the back navigation: self.navigationItem.title = " " } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "My Title" } 

Если вы хотите стрелку назад, чтобы следующий код был помещен в файл AppDelegate в метод didFinishLaunchingWithOptions.

Для Свифта

 let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal) 

Я решил эту проблему, добавив «» в заголовок StoryBoard предыдущего ViewController. Просто пространство, а не пустое; D

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

Наконец нашел идеальное решение.

Просто добавьте одно прозрачное изображение и добавьте следующий код в свой AppDelegate.

 UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default) 

В моем случае, для пользовательских значок и название это сделал трюк (Swift 4)

  let imgBack = UIImage(named: "ic_back") navigationController?.navigationBar.backIndicatorImage = imgBack navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBack navigationItem.leftItemsSupplementBackButton = true navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil) 

Для Swift 4+ поместите эти строки в AppDelegate адресу didFinishLaunchingWithOptions

 let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) BarButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default) 

Если у вас есть ViewControllerA и вы хотите перейти к ViewControllerB, в ViewControllerA вы должны установить текущий элемент навигации с новым UIBarButtonItem и заголовком на строку с пробелом перед нажатием на другой controller представления:

Задайте заголовок для строки с пробелом, вы не можете установить nil или “” (пустая строка), потому что значение по умолчанию равно nil

 let backItem = UIBarButtonItem() backItem.title = " " navigationItem.backBarButtonItem = backItem let controllerB = ViewControllerB() navigationController?.pushViewController(controllerB, animated: true) 
 let button: UIButton = UIButton (type: UIButtonType.Custom) button.setImage(UIImage(named: "imageName"), forState: UIControlState.Normal) button.addTarget(self, action: "backButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) button.frame = CGRectMake(0, 0, 30, 30) let barButton = UIBarButtonItem(customView: button) self.navigationItem.leftBarButtonItem = barButton func backButtonPressed(btn : UIButton) { // Your code } 

Для меня это сделало трюк:

 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) self.navigationItem.title = " " } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "my amazing title" navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil) } 

Обратите внимание: если вы установите только заголовок без изменения функции backBarButtonItem, он будет работать. Но если вы попытаетесь вернуться с помощью жестов, а затем отмените и останетесь на controllerе с нажатым представлением, возвращается заднее название.

Работа в Swift 4

Вы должны выбрать панель навигации controllerа, с которой будет нажата кнопка возврата, и введите «» в поле «Назад».

например, если вы нажимаете controller A на controller B, помещайте пробелы в панель навигации controllerа.

Чтобы удалить из всех controllerов view в стеке controllerа навигации:

подclass UINavigationController и добавьте следующее:

 override func show(_ vc: UIViewController, sender: Any?) { setEmptyBackButton(vc) super.show(vc, sender: sender) } override func pushViewController(_ viewController: UIViewController, animated: Bool) { setEmptyBackButton(viewController) super.pushViewController(viewController, animated: animated) } func setEmptyBackButton(_ viewController: UIViewController) { viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) } 

Иногда он не работает, чтобы изменить только цвет заголовка, если заголовок длинный. Потому что это может привести к смещению заголовка навигационной панели влево. Таким образом, чтобы предотвратить это, вам может потребоваться сдвинуть заголовок кнопки панели горизонтально в дополнение к прозрачности:

 let barButtonItemAppearance = UIBarButtonItem.appearance() barButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) barButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default) 

Я использовал этот код в функции didFinishLaunchingWithOptions приложения Appdelegate.

 if #available(iOS 11, *) { UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .highlighted) } else { UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default) } 

В Xcode 9.2 с Swift он работал следующим образом:

 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) } 

В случае, когда мы вообще не контролируем предыдущий controller представления (т. Е. Если мы работаем в рамках), мы можем удалить заголовок кнопки «Назад» следующим образом:

 // For iOS 10 navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = String() // For iOS 11 navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = nil 

Для этого нужно перейти к последнему элементу стека навигации и удалить его задний заголовок. Обязательно сохраните оригинал, когда появится наш controller просмотра:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) originalBackButtonTitle = navigationController?.navigationBar.items?.last?.backBarButtonItem?.title // Delete title somewhere here... } 

а затем переназначьте его, чтобы не нарушать какую-либо часть приложения:

 override func viewWillDisappear(_ animated: Bool) { navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = originalBackButtonTitle super.viewWillDisappear(animated) } 
Давайте будем гением компьютера.