Название Backgutton независимо от родителя [дубликат]

В то время как , что вызывает NullReferenceExceptions и подходит к avoid / fix , такое исключение было рассмотрено в других ответах, что многие программисты не имеют " t узнал еще, как независимо отлаживать такие исключения во время разработки.

В Visual Studio это обычно легко благодаря Visual Studio Debugger .


Во-первых, убедитесь, что правильная ошибка будет обнаружена - см. . Как разрешить нарушение «Исключение System.NullReferenceException» в VS2010? Примечание1

Затем либо Начать с отладки (F5) , либо Приложить [отладчик VS] к запуску процесса . Иногда может быть полезно использовать Debugger.Break , в котором будет предложено запустить отладчик.

Теперь, когда NullReferenceException выбрано (или необработанно), отладчик остановится ( помните правило, указанное выше?) в строке, на которой произошло исключение. Иногда ошибка может быть легко обнаружена.

Например, в следующей строке единственный код, который может , вызывает исключение, если myString имеет значение null. Это можно проверить, посмотрев окно Watch или выполнив выражения в окне Immediate Window .

var x = myString.Trim();

В более сложных случаях, таких как следуя ниже, вам нужно будет использовать один из методов выше (Watch или Immediate Windows) для проверки выражений, чтобы определить, было ли str1 пустым или если str2 имеет значение null.

var x = str1.Trim() + str2.Trim();

Once , где было выбрано исключение, это обычно тривиально по отношению к разуму назад, чтобы выяснить, где введенное значение null было [неправильно] -

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


1 Если Break on Throws слишком агрессивен и отладчик останавливается на NPE в библиотеке .NET или сторонних разработчиков, Break на User-Unhandled можно использовать для ограничения выловленных исключений. Кроме того, VS2012 представляет Just My Code , который я рекомендую также включить.

Если вы отлаживаете с включенным Just My Code, поведение немного отличается. При включенном Just My Code отладчик игнорирует исключения, связанные с привилегиями обычного языка (CLR) первого шанса, которые выходят за пределы My Code и не проходят через My Code

blockquote>

57
задан CharlesB 26 March 2012 в 15:16
поделиться

16 ответов

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

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

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

self.navigationItem.title = @"Back";

Он работает без сюжетных плат.

32
ответ дан Tendulkar 25 August 2018 в 20:54
поделиться

Если вы хотите сделать это программно, это можно сделать следующим образом:

Objective-C

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

[self.navigationItem setBackBarButtonItem:backItem];

Swift

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

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

enter image description here [/g2]

ПРИМЕЧАНИЕ. Важно помнить, что вы должны настроить это на контроллере представления, к которому вы бы возвращались, нажав кнопку «Назад», а не на текущий вид контроллера.

179
ответ дан Mick MacCallum 25 August 2018 в 20:54
поделиться

В интерфейсе Builder или Storyboarding есть простой способ сделать это. В родительском контроллере View просто установите атрибут «Back Button» элемента навигации на любой желаемый заголовок. Вот пример:

Set Back Button Title of child view controller form parent view controller [/g0]

В представлении таверны Вильяна будет «Назад» в качестве заголовка Back Button, как мы только установили в инспекторе атрибутов родительского навигационный контроллер (Best Bars).

42
ответ дан Roger 25 August 2018 в 20:54
поделиться

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

dispatch_async(dispatch_get_main_queue(), ^(void) {

    self.navigationController.navigationBar.backItem.title = @"Custom Title";
});
4
ответ дан Winston 25 August 2018 в 20:54
поделиться

Swift 4

В вашем UIViewController установите это:

let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton
0
ответ дан Ben-hur Ott 25 August 2018 в 20:54
поделиться

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

. Я прошел через Interface Builder и поместил «Назад» в кнопку «Назад» поле каждого UINavigationItem.

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

Проблема заключалась в том, что у not на каждом контроллере представления в раскадровке был UINavigationItem.

Я исправил это, перетащив новый UINavigationItem на каждый UIViewController, у которого его не было, и установил все полей кнопки «Назад»

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

0
ответ дан DrSmart 25 August 2018 в 20:54
поделиться

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

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];
}
1
ответ дан Hussain Shabbir 25 August 2018 в 20:54
поделиться

Вы можете достичь этого, используя titleView из navigationItem

Swift 3 Answer

• Создайте одно расширение для 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")
}
1
ответ дан Leojin 25 August 2018 в 20:54
поделиться

Если вы используете ссылки Storyboard, контроллер View может не отображать элемент навигации в построителе интерфейса.

Ручное перетаскивание навигационной панели не будет работать, вам нужно перетащить элемент навигации

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

Цитирование Mick MacCallum:

ПРИМЕЧАНИЕ. Важно помнить, что вы должны настроить это на контроллере представления, возвращаясь к нажатию кнопки «Назад», а не в настоящее время видимый контроллер.

0
ответ дан Lucas 25 August 2018 в 20:54
поделиться

Попробовать код ниже:

[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];
-1
ответ дан LuFFy 25 August 2018 в 20:54
поделиться

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

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

enter image description here [/g1]

Источник: http://pinkstone.co.uk/how-to-change-the-back-button -text-на-UINavigationController-в-ваш-раскадровки /

0
ответ дан Luis 25 August 2018 в 20:54
поделиться

Очень важно, чтобы параметр «Имитированные показатели» контроллера не выбирался как «Inferred».

Я попробовал «None», и все это правильно!

1
ответ дан Lukasz 'Severiaan' Grela 25 August 2018 в 20:54
поделиться

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
}

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

4
ответ дан Nathan Tuggy 25 August 2018 в 20:54
поделиться

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

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

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

Swift3:

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

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

Второй способ - использовать локализация раскадровки через Main.strings файл,

"nnnnnnn.title" = "localized string";

nnnnnnn означает идентификатор объекта BackBarButtonItem в контроллере представления источника (а не контроллер представления назначения!) [/ ​​g6]

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

Извините, я не смог загрузить скриншоты.

0
ответ дан osexp2003 25 August 2018 в 20:54
поделиться

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

self.navigationItem.backBarButtonItem.title = @"NewName";
0
ответ дан Yakimenko Aleksey 25 August 2018 в 20:54
поделиться

В Swift я нашел решение очень простым,

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

self.title = "BackButtonTitle"

Вот и все.

Примечание: - Это изменит заголовок ViewControllerA

1
ответ дан Zaid Pathan 25 August 2018 в 20:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: