Изменение названия кнопки UINavigationBar
В моем приложении я хочу использовать текст "Назад" в качестве заголовка кнопки "Назад" для каждого диспетчера представлений.
Я прочитал столько сообщений в stackoverflow, но ничего не получил.
Я не хочу устанавливать leftbarbuttonitem.
Может ли кто-нибудь помочь мне в этой простой задаче.
Спасибо,
Ответы
Ответ 1
Сделайте это в родительском контроллере представления, а не в дочернем.
Swift
navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)
-С Целью СССР
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Ответ 2
self.navigationController.navigationBar.topItem.title = @"";
Ответ 3
Если вы используете раскадровку, вы можете выбрать элемент навигации в родительском контроллере представления и установить нужный текст кнопки в поле Кнопка. Не забудьте установить это в родительском контроллере представления, а не в потомке, который выдвигается.
![enter image description here]()
Ответ 4
Попробуйте эту надежду, что это будет работа
UIBarButtonItem *btn =
[[UIBarButtonItem alloc] initWithTitle:@"New Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[[self navigationItem] setBackBarButtonItem:btn];
Ответ 5
Мне нужно было использовать self.navigationController.navigationBar.backItem.title = @"";
, разница в том, что я использую backItem
вместо topItem
.
Ответ 6
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
Ответ 7
Swift 2.0:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.topItem?.title = ""
}
Примечание. Работает только в том случае, если раскадровка имеет цепочку стеков навигации.
Другие параметры/изменение названия:
self.navigationController?.navigationBar.backItem?.title = ""
navigationItem.backBarButtonItem?.title = ""
navigationItem.leftBarButtonItem?.title = ""
Удаление элемента навигации:
navigationItem.setLeftBarButtonItem(nil, animated: true)
Ответ 8
Кнопка "Назад" со стрелкой "назад"
Objective-C
self.navigationController.navigationBar.topItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain
target:nil action:nil];
Swift
self.navigationController?.navigationItem.backBarButtonItem =
UIBarButtonItem(title:"Title", style:.plain, target:nil, action:nil)
Обычная кнопка без стрелки назад
Objective-C
self.navigationItem.leftBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Title"
style:UIBarButtonItemStylePlain target:nil action:nil];
Swift
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title:"Title",
style:.plain, target:nil, action:nil)
Жирная кнопка без стрелки назад
Objective-C
self.navigationItem.leftBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Title"
style:UIBarButtonItemStyleDone target:nil action:nil];
Swift
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title:"Title",
style:.done, target:nil, action:nil)
Ответ 9
Изменяет видимую в данный момент кнопку "Назад"
extension UIViewController {
func setCurrentBackButton(title: String) {
guard let vcCount = self.navigationController?.viewControllers.count else {
return
}
let priorVCPosition = vcCount - 2
guard priorVCPosition >= 0 else {
return
}
self.navigationController?.viewControllers[priorVCPosition].navigationItem.backBarButtonItem = UIBarButtonItem(title: title, style: .plain, target: self, action: nil)
}
Ответ 10
Чтобы удалить заголовок кнопки "Назад" для всех контроллеров представления, добавьте новый файл swift и скопируйте в него это вымирание
import UIKit
extension UIViewController {
static func swizzle(){
let orginalSelector = #selector(viewDidLoad)
let swizzledSelector = #selector(swizzledViewDidLoad)
let orginalMethod = class_getInstanceMethod(UIViewController.self, orginalSelector)
let swizzledMethod = class_getInstanceMethod(UIViewController.self, #selector(swizzledViewDidLoad))
let didAddMethod = class_addMethod(UIViewController.self, orginalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))
if didAddMethod {
class_replaceMethod(UIViewController.self, swizzledSelector, method_getImplementation(orginalMethod!), method_getTypeEncoding(orginalMethod!))
}else{
method_exchangeImplementations(orginalMethod!, swizzledMethod!)
}
}
@objc func swizzledViewDidLoad(){
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
swizzledViewDidLoad()
}
}
После этого в AppDelegate внутри didFinishLaunchingWithOptions вызовите функцию swizzle.
UIViewController.swizzle()
Эта функция использует целевую среду выполнения c для обмена методом viewDidLoad
с другим, который удаляет заголовок кнопки "Назад", а затем внутри него вызывает исходный viewDidLoad
.
Ответ 11
в AppDelegate
в DidFinishLaunchingWithOptions
добавьте этот код:
[[UIBarButtonItem appearance]
setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000.0, 0.0)
forBarMetrics:UIBarMetricsDefault];