В настоящее время значение по умолчанию для кнопки левой панели является заголовком представления, которое загрузило текущее, другими словами, представление, которое будет отображаться при нажатии кнопки (кнопка назад).
Я хочу изменить текст, показанный на кнопке, на что-то другое.
Я попытался поместить следующую строку кода в метод viewDidLoad контроллера представления, но, похоже, он не работает.
self.navigationItem.leftBarButtonItem.title = @"Log Out";
Что я должен делать?
Спасибо.
-viewDidLoad:
В ChildVC это работало для меня ...
Работает и в Swift!
источник
Вот документация для backBarButtonItem :
View Controller A ( «родительский» контроллер представления):
Когда любой другой контроллер представления B находится сверху стека навигации, а A прямо под ним, кнопка возврата B будет иметь заголовок «Short» .
источник
в Xcode 4.5 с использованием раскадровки, безусловно, самое простое решение, которое я нашел, когда значение кнопки «Назад» не нужно динамически менять, - это использовать поле «Кнопка назад», связанное с элементом навигации контроллера вида, к которому вы хочу кнопку «Назад», чтобы сказать что-то еще.
Например, на скриншоте ниже, я хочу, чтобы кнопка «Назад» для контроллеров, которые я нажимаю, имела «Назад» в качестве заголовка кнопки «Назад».
Конечно, это не сработает, если вам нужно, чтобы кнопка «Назад» каждый раз говорила что-то немного другое… Для этого есть все другие решения.
источник
Я знаю, вопрос очень старый, но я нашел хорошее решение.
Работает от childView! Протестировано с iOS 7.
источник
Может быть, я слишком упрощен, но из документации Apple формулировка:
Решение, помеченное как правильное выше, устанавливает элемент кнопки по умолчанию из родительского контроллера. Это правильный ответ, но я решаю проблему, изменяя
self.title
свойство UIViewController прямо перед помещением нового контроллера в стек NavigationController.Это автоматически обновляет заголовок кнопки «Назад» на следующем контроллере, и до тех пор, пока вы
self.title
вернетесь к исходному состоянию,viewWillAppear
я не смогу увидеть, что этот метод вызывает слишком много проблем.источник
Эта работа лучше для меня. Пытаться :
источник
В Swift / iOS8 у меня сработало следующее:
Портировано из ответа Фелипе.
источник
self.navigationController?.navigationBar.topItem?.backBarButtonItem
Хорошо, вот способ. Если у вас есть контроллер вида «первый» и вы перемещаетесь по другому контроллеру вида «второй», нажимая кнопку или что-то еще, вам нужно проделать некоторую работу. Сначала вам нужно создать BarButtonItem в методе ViewDidLoad «второго» контроллера вида следующим образом;
После того, как вы это сделаете, вам нужно записать код для действия "btnBack" в том же файле .m, как этот;
Вот и все.
источник
leftBarButtonItem
не имеет вид abackBarButtonItem
, если это важно при разработке приложения.У меня был родительский контроллер представления с очень длинным заголовком. Это привело к тому, что текст кнопки «назад» превратился в заголовок дочернего контроллера представления.
После того, как я попробовал несколько разных решений, это то, что я в итоге сделал (расширяя подход @ john.k.doe):
Используя Xcode 7.2, Swift 2
Navigation Item
в сцену родительского представления (не дочерний виртуальный канал).Attributes Inspector
вашем новомNavigation Item
, введитеspace
символ вBack Button
поле. Подробнее об этом позже.фрагмент кода:
Объяснение:
Кнопка «Назад» относится к родительскому контроллеру представления. Он
Navigation Item
дает вам указатель на кнопку «Назад», поэтому вы можете установить заголовок в коде или в раскадровке.Примечание:
Если оставить
Navigation Item
Back Button
текст в качестве пустой строки по умолчанию, заголовок кнопки «Назад» станет «Назад».Другие подходы работают, зачем использовать этот?
Несмотря на то, что на дочернем контроллере представления можно переопределить заголовок кнопки «назад», было трудно получить ручку до тех пор, пока она не вспыхнула на экране.
Некоторые из подходов создают новую кнопку возврата и переопределяют существующую. Я уверен, что это работает, и, вероятно, необходимо в некоторых случаях использования. Но я предпочитаю использовать существующие API, когда это возможно.
Смена
title
родительского контроллера представления - самое быстрое решение для некоторых ситуаций. Однако это меняет родительский заголовок, поэтому вам нужно управлять состоянием. Вещи также становятся беспорядочными,Tab Bar Controller
потому что изменения названия вызывают побочные эффекты сTab Bar Item
названиями.источник
Для тех, кто использует раскадровки, просто выберите родительский (а не тот, который содержит представление цели) вид контроллера (обязательно щелкните правой кнопкой мыши на панели навигации, затем откройте инспектор атрибутов, где вы найдете три входа формы. Третий " Кнопка «Назад» - это то, что мы ищем.
источник
Swift версия:
У вашего ребенка ViewController:
источник
Вот еще один способ сделать это.
В вашем родительском контроллере представления реализуйте следующий метод:
В вашем дочернем контроллере представления, когда вы хотите изменить заголовок, это будет работать:
Я так и не смог заставить
parentViewController
имущество работать:Я не знаю, если это ошибка, или я не использую ее должным образом. Но захват второго-последнего контроллера представления в
viewControllers
массиве указывает на родительский контроллер представления, и я могу правильно вызывать родительские методы с этой ссылкой.источник
хорошо. Я лично ненавидел все эти варианты. Поэтому я придумал свое.
На основании информации, которую я видел. Похоже, что контроллер предыдущего представления контролирует свою собственную кнопку «Назад», которая будет представлена на контроллере с принудительным просмотром.
Я создал метод отложенной загрузки для навигационного элемента на контроллере, который хочет изменить кнопку «Назад».
Шахта - Контроллер Приглашения Покупателя
Пригласить покупателя - это текст, который установлен по умолчанию.
но кнопку «Назад» нужно было пригласить
Вот код, который я использовал для создания кнопки возврата.
Я поместил этот код в верхнюю часть файла Контроллера (.m), и он автоматически переопределил метод super.
Я чувствую, что это гораздо более элегантный способ сделать это.
Я размещаю этот код в одном месте, и он автоматически заполняется при необходимости.
Не нужно вызывать код перед каждым push-запросом.
Надеюсь это поможет
источник
источник
Вот ответ:
В
viewDidAppear:animated
(НЕ вviewDidLoad
) сделать следующееЭто если вы хотите сохранить форму кнопки назад.
источник
Ни одно из решений, описанных здесь, не сработало для меня. Поэтому я удалил название со сцены, откуда я пришел, следующим образом:
self.title = @"";
Поэтому, когда новая сцена представлена, обратный текст не появляется.
Я абсолютно согласен, что это не совсем ясное решение, но оно сработало, и ни одно из объяснений не сработало для меня.
источник
Я обнаружил, что лучше всего изменить заголовок текущего контроллера представления в стеке навигации на нужный текст кнопки «Назад», прежде чем переходить к следующему контроллеру представления.
Например
Затем в viewDidAppear установите заголовок обратно к желаемому заголовку для исходного VC. Вуаля!
источник
Для Свифта:
источник
Я обнаружил, что самый простой способ изменить имя кнопки «назад» - установить заголовок контроллера представления на заголовок кнопки «Назад», а затем заменить titleView в элементе навигации контроллеров представления на пользовательский ярлык с его реальным название.
Как это:
CustomViewController.m
Это сделает ваш заголовок в UINavigationBar похожим на нативный. Предоставление контроллеру представления возможности разделить заголовок и заголовок кнопки возврата.
В случае контроллеров представления A и B, A отвечает за то, как сказать, как должна выглядеть его кнопка «назад», пока отображается B.
РЕДАКТИРОВАТЬ: Это также поддерживает родной вид кнопки «Назад» (пункт кнопки со стрелкой влево).
источник
Этот код тоже работает. Поместите это на корневой контроллер контроллера навигации:
источник
Я новичок в iOS, но я приведу очень простой ответ о переопределении класса контроллера навигации. Я просто переопределил методы push и pop и сохранил заголовок предыдущего контроллера. Извините за вставку в блок JS. Был немного смущен, как вставить его в нормальный блок кода.
источник
self.navigationController.navigationBar.backItem.title = @"TEXT";
И в Свифте:
источник
вы можете поместить его в любом месте кода в контроллере parrent, который позволяет вам использовать разные кнопки для разных дочерних представлений.
источник
Большинство решений убивает оригинальный стиль BackButton (кнопка со стрелкой влево) при добавлении обычной кнопки с нужным заголовком.
Поэтому сохранить оригинальный стиль можно двумя способами:
1-й: использовать недокументированный стиль кнопок (110 или что-то в этом роде), который я предпочитаю не делать. Но если вы хотите, вы можете найти, как это сделать здесь, в stackoverflow.
2-й: использовать идею Тренскова. Мне понравилось, и я использую это немного изменилось.
Вместо переопределения - (NSString *) заголовка, я решил сохранить исходный заголовок следующим образом (что позволяет мне использовать заголовки nib, а также заданный заголовок в состоянии push btw).
Это решение хорошо работает и выглядит нативно. Также, если использовать его в методе viewDidLoad, он предотвращает выполнение более 1 раза.
Также я попробовал решение Jessedc, но оно выглядит плохо. Это вызывает видимое для пользователя изменение строки заголовка на лету с оригинального на желаемое BackButton и обратно.
источник
Это работает для меня как «упрощенная» версия предыдущих опубликованных ответов.
Не забудьте поместить код в родительский контроллер представления (например, представление с вашим табличным представлением или UITableViewController), а не в дочернее или подробное представление (например, UIViewController).
Вы можете легко локализовать строку кнопки «Назад» следующим образом:
источник
У нас есть два ВК A и B.
Если вы хотите изменить заголовок в B, напишите этот код в A
Swift 4.1 Xcode 9.4
источник
Ответ Стэна был лучшим. Но это также имеет проблему, когда вы используете контроллер с панелью вкладок и изменяете заголовок контроллера, вы также можете изменить заголовок панели вкладок. Так что лучший ответ - это изменить только view_controller.navigationItem.title и использовать view_controller.navigationItem .title в функции. Ответ здесь: (С ARC и добавьте их в viewDidLoad)
В моем собственном использовании я делаю эту функцию подобной этой, просто добавьте функцию с однострочным кодом в viewDidLoad.
источник
Если вы хотите не только изменить текст кнопки «Назад» на тот же текст и сохранить исходную форму стрелки влево, но и сделать что-то, когда пользователь нажимает кнопку «Назад», я рекомендую вам взглянуть на мой « CustomNavigationController » ,
источник
ПРОБЛЕМА: «Назад» текст в панели навигации не может быть заменен.
ПРИЧИНА: Метка «Назад» устанавливается на панели навигации после нажатия представления, потому что атрибут .title в родительском контроллере представления был установлен в ноль (или не инициализирован).
ЕДИНСТВЕННОЕ РЕШЕНИЕ: Если вы установите self.title = "Независимо от ...", вы увидите, что вместо "Назад" появится сообщение "Независимо от ..." после нажатия нового контроллера представления.
источник