Подтвердить что ты не робот

Изменение названия кнопки UINavigationBar

В моем приложении я хочу использовать текст "Назад" в качестве заголовка кнопки "Назад" для каждого диспетчера представлений. Я прочитал столько сообщений в stackoverflow, но ничего не получил.

Я не хочу устанавливать leftbarbuttonitem.

Может ли кто-нибудь помочь мне в этой простой задаче.

Спасибо,

4b9b3361

Ответ 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];