Как изменить имя кнопки возврата UINavigationController?



у меня есть UIViewController и я перемещаюсь с моего первого контроллера вида на второй контроллер вида, и я хочу изменить имя кнопки, показанной на navigationcontroller вернуться ....



SecondViewController *secondController = [[SecondViewController alloc]
initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:secondController animated:YES];


теперь во второй viewcontroller Я хочу изменить имя кнопки в navigationController.

671   16  

16 ответов:

в viewWillAppear напишите это

self.navigationItem.title = @"List View";

и в ViewWilldisapper напишите это

self.navigationItem.title = @"Back";

Он работает без раскадровки.

Если вы хотите сделать это программно, то это можно сделать так:

С

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
                                                             style:UIBarButtonItemStyleBordered
                                                            target:nil
                                                            action:nil];

[self.navigationItem setBackBarButtonItem:backItem];

Свифт

let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem

однако, если вы предпочитаете использовать Interface Builder, просто выберите UINavigationItem, для которого вы хотите установить кнопку назад, и перейдите к инспектору атрибутов, чтобы изменить заголовок кнопки Назад.

enter image description here

Примечание: важно помнить, что вы должны настроить его на контроллер вида, к которому вы вернетесь после нажатия кнопки "назад", а не видимый в данный момент контроллер вида.

есть простой способ сделать это в Interface Builder или раскадровке. В контроллере родительского вида просто установите атрибут "кнопка Назад" элемента навигации в любое название, которое вы хотите. Вот пример:

Set Back Button Title of child view controller form parent view controller

вид таверны Виллиана будет иметь" назад "в качестве заголовка кнопки "Назад", как мы только что установили в инспекторе атрибутов навигационного контроллера родителя (лучшие бары).

в моем случае он работал только с кодом в основном потоке, например:

dispatch_async(dispatch_get_main_queue(), ^(void) {

    self.navigationController.navigationBar.backItem.title = @"Custom Title";
});

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
}

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

In Свифт Я нашел решение очень простое,

предположим, что я на ViewControllerA и будет ViewControllerB, Если я хочу изменить имя кнопки Назад, показанной на ViewControllerB, Я сделаю это в ViewControllerA,

self.title = "BackButtonTitle"

вот и все.

Примечание: это изменит название ViewControllerA

очень важно, чтобы в контроллере представления параметр "смоделированные метрики" не был выбран как "выведенный".

Я пробовал с "нет" и все правильно!

попробуйте так:-

NSArray *viewControllerArr = [self.navigationController viewControllers];
// get index of the previous ViewContoller
long previousViewControllerIndex = [viewControllerArr indexOfObject:self] - 1;
UIViewController *previous;
if (previousViewControllerIndex >= 0) {
    previous = [viewControllerArr objectAtIndex:previousViewControllerIndex];
    previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                                                 initWithTitle:@"Back"
                                                 style:UIBarButtonItemStylePlain
                                                 target:self
                                                 action:nil];
}

на самом деле вы можете изменить название кнопки Назад

self.navigationItem.backBarButtonItem.title = @"NewName";

вы можете достичь этого с помощью titleView на navigationItem

Swift 3 Ответ

* создайте одно расширение для UINavigationItem ниже

extension UINavigationItem {
    func customTitle(title: String) {
        let titleLabel = UILabel()
        titleLabel.text = title
        titleLabel.textColor = UIColor.white
        titleLabel.textAlignment = .center
        titleLabel.sizeToFit()
        titleView = titleLabel
    }
}

• в контроллерах viewDidLoad сделать следующее

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        title = "Text For Back Button"
        navigationItem.customTitle(title: "Title for your view controller")
}

Попробуйте Ниже Код:

[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];

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

  • перейти к раскадровке
  • выберите, какой UIViewController вы хотите изменить текст кнопки Назад.
  • нажмите на UINavigationItem в верхней части вашего UIViewController. (с названием)
  • на правой панели выберите инспектор атрибутов (4-й значок).
  • Теперь вы можете установить название, подсказку и кнопку Назад тексты.

enter image description here

Источник: http://pinkstone.co.uk/how-to-change-the-back-button-text-on-a-uinavigationcontroller-in-your-storyboard/

Если вы используете ссылки на раскадровку, контроллер Вида может не отображать элемент навигации в Interface Builder.

вручную перетащить панель навигации не будет работать, вам нужно перетащить Навигации Пункт

затем вы сможете установить заголовок кнопки "Назад". Здесь же вы зададите заголовок представления.

Цитирую Мик MacCallum:

Примечание: важно помнить, что вы должны настроить это на контроллере вида, к которому вы вернетесь после нажатия кнопки "назад", а не на текущем видимом контроллере вида.

есть два способа сделать это.

Первый способ-это программный код:

ответ Якименко Алексея-самый простой способ, Это действительно работает (проверено на Xcode 8 + iOS 10)

Swift3:

self.navigationItem.backBarButtonItem?.title = "Your customized back title"

Примечание: Вы должны вызвать выше код в контроллере исходного вида, а не контроллер вида назначения.

Второй способ-использовать локализацию раскадровки через ,

"nnnnnnn.title" = "localized string";

nnnnnnn означает идентификатор объекта BackBarButtonItem в источник контроллер вида (не контроллер вида назначения!)

вам нужно установить свойство "назад" элемента панели навигации, он автоматически создаст BarButtonItem, вы найдете его идентификатор объекта.

к сожалению, я не смог загрузить скриншоты.

У меня была довольно сложная раскадровка со многими навигационными контроллерами, и мой клиент хотел, чтобы все кнопки назад говорили "назад"

Я прошел в Interface Builder и поставил "назад" в поле кнопки "Назад" каждого UINavigationItem.

Я не работал для каждого изменения сцены!

проблема была в том, что не каждый контроллер вида в раскадровке имел UINavigationItem.

я исправил это, перетащив новый UINavigationItem на каждый UIViewController, который не имел одного, и установка все из полей кнопки "Назад"в " Назад"

следите за контроллерами, которые не задают свой собственный UINavigationItem автоматически.

Swift 4

в своем UIViewController задайте этот:

let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton

Comments

    Ничего не найдено.