Как я могу настроить кнопку навигации назад в iOS 7 и выше без заголовка? (т.е. только со стрелкой)
self.navigationItem.leftBarButtonItem = self.editButtonItem;
Мне просто интересно, есть ли у них self.backButtonItem;
ИЛИ
что-то вроде этого?
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemBACK
target:self action:@selector(back)];
Ответы:
Это на самом деле довольно легко, вот что я делаю:
Цель С
Swift 2
Свифт 3
Поместите эту строку в контроллер представления, который помещается в стек ( предыдущий контроллер представления ). Недавно нажатая кнопка назад контроллера представления покажет все, что вы положили для initWithTitle, который в данном случае является пустой строкой.
источник
prepareForSegue
в контроллере представления, и он работал отлично.Я нашел простой способ сделать мою кнопку возврата с iOS одной стрелкой.
Давайте предположим, что у вас есть навигационный контроллер, идущий в ViewA из ViewB. В IB выберите панель навигации ViewA, вы должны увидеть следующие опции: Заголовок, Подсказка и Кнопка Назад.
Параметры панели навигации ViewA
Хитрость заключается в выборе заголовка кнопки «Назад» (ViewB) в контроллере вида судьбы в настройках предыдущего контроллера («Вид А»). Если вы не заполните опцию «Кнопка назад», iOS автоматически поставит заголовок «Назад», с предыдущим контроллера. Итак, вам нужно заполнить эту опцию одним пробелом.
Заполните пробел в опции «Кнопка назад»
Результат:
источник
Back Button
установлен один пробел (т.е. как ViewA и ViewB)Просто используйте изображение!
OBJ-C :
SWIFT 4 :
Icon-back.png
Icon-Back@2x.png
Icon-Back@3x.png
источник
navigationController?.interactivePopGestureRecognizer?.delegate = self
делает трюк, чтобы держать жест спиной назадВ iOS7 появились новые правила интерфейса, поэтому лучше сохранить хотя бы стрелку назад, когда вы нажимаете UIView. Изменить текст «назад» очень просто программно. Просто добавьте этот код, прежде чем отправлять представление (или prepareForSegue, если вы используете StoryBoards):
Это изменит текст «Назад» по умолчанию, но сохранит стрелку назад в стиле iOS7. Вы также можете изменить цвет оттенка для стрелки назад, прежде чем нажимать вид:
Надеюсь, это поможет вам!
источник
Ничего особенного вам не нужно делать. Вы можете достичь того же самого через раскадровку.
Просто зайдите в корневой навигационный контроллер и оставьте пробел. Помните не для контроллера, который вы хотели кнопку назад без заголовка, но для корневого контроллера навигации.
источник
Несмотря на то, что ответ Кайла Бегемана полностью помогает, довольно досадно иметь этот код в каждом возможном контроллере представления. Я закончил с простой
UINavigationItem
категорией. Осторожно, здесь будут драконы! Извините, я имею в видуисточник
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000) forBarMetrics:UIBarMetricsDefault];
( источник ) - может быть немного менее элегантно, но излишнее чувство ощущалось излишнимUINavigationItem
это очень собственный метод, в котором нет наследования. И_cmd
вряд ли будет вовлечен в добытчик. В любом случае, это хороший момент. Так что, если у вас есть какой-либо из этих многочисленных помощников в вашем проекте, убедитесь, что вы используете его и здесь.РЕДАКТИРОВАТЬ: 2014-04-09: Поскольку я получил репутацию, мне жаль, потому что я больше не использую этот трюк. Я рекомендую ответ Кайла. Также обратите внимание , что
self
изself.navigationItem.backBarButtonItem
не - контроллера отображается кнопка назад, но предыдущий контроллер представления , чтобы быть вернулось.Если вам не нужен текст заголовка для предыдущего контроллера представления, просто заполните заголовок пустой строкой;
Это предотвратит отображение «назад» с помощью шеврона на контроллере просмотра.
РЕДАКТИРОВАТЬ: Даже если вы используете непустой текст заголовка, установка заголовка предыдущего контроллера вида в
viewWillAppear:
работах, за исключением того, что заголовок может мигать, когда контроллер представления выскочил. Я думаю, что «приложение Twitter», кажется, делает более тонкий взлом, чтобы избежать мерцания.источник
Это работает, но удалит заголовок предыдущего элемента, даже если вы вернетесь к нему:
Просто установите это свойство на
viewDidLoad
нажатой View Controller.источник
viewWillAppear
чтобы он всегда был установлен правильно.Это то, как я это делаю, и самый простой, эффективный и понятный способ сделать это.
Это работает, если встроить
Navigation Controller
Свифт 3
В
viewDidLoad
добавлении этого в View Controller вы хотите, чтобы кнопка «Назад» была просто стрелкой.Отличие этого от ответа @Kyle Begeman состоит в том, что вы вызываете это на контроллере представления, который вы хотите, чтобы кнопка «назад» была просто стрелкой, а не на контроллере представления с выталкивающим стеком.
источник
У вас нет доступа к навигации backButtonItem так, как вы хотите, вам нужно создать собственную кнопку возврата, как показано ниже:
И конечно
источник
Цель: настройка кнопки «Назад» на
UINavigationBar
белый значокШаги: 1. в методе "didFinishLaunchingWithOptions" AppDelete :
2. в
viewDidLoad
методе общего суперклассаViewController
:источник
SWIFT 4
Для тех, кто хочет создать пользовательские кнопки «Назад» и удалить их заголовок, используйте следующий фрагмент кода в контроллере вида, который выдвигает новый:
Для более универсального использования сделайте следующее:
Создайте универсальную функцию следующим образом:
Затем используйте его в контроллерах представления следующим образом:
источник
Простой взлом от iOS6 тоже работает на iOS7:
Изменить: не используйте этот хак. Смотрите комментарий для деталей.
источник
Вы можете использовать это. Это прекрасно работает для меня, просто добавив
UIButton
custumview дляUIBarButtonItem
.Попробуйте код ниже
источник
Создайте
UILabel
с названием, которое вы хотите для вашего корневого контроллера представления и назначьте его контроллеру представленияnavigationItem.titleView
.Теперь установите заголовок на пустую строку, и у следующего контроллера представления, который вы нажмете, будет кнопка возврата без текста.
источник
источник
Все ответы не решают проблему. Недопустимо устанавливать заголовок кнопки «Назад» в каждом контроллере представления, и добавление смещения к заголовку по-прежнему приводит к сдвигу заголовка следующего контроллера вида влево.
Вот метод, использующий метод Swizzling, просто создайте новое расширение для UINavigationItem
источник
Я применил следующий код в viewDidLoad, и он работает:
Просто для обновления я использую Векторный Icon
источник
Вы можете создать подкласс UINavigationController, установить себя в качестве делегата и установить backBarButtonItem в методе делегата
navigationController:willShowViewController:animated:
источник
Установить обратно название пустым
Изменить изображение назад
источник
Я использую это решение с iOS 5 или около того без каких-либо проблем. Я сделал служебную функцию, которую я вызываю в моих контроллерах представления. Вам нужно сделать это либо в viewDidLoad, либо в любой другой точке после этого.
В некоторых случаях элемент навигации может уже существовать, в других случаях его необходимо создать. Это учитывает оба этих случая, не мешая названию элемента навигации. Это позволяет вам удалить заголовок, просто передав
@""
.источник
Единственный способ, который работал для меня, был:
ОБНОВИТЬ:
Когда я изменил флаг анимации segue на true (раньше он был false), единственный способ, который работал для меня, был:
источник
Если у вас есть два ViewController (FirstVC, SecondVC) Embed в Navigation Controller, и вы хотите, чтобы во SecondVC была только стрелка назад.
Вы можете попробовать это в FirstVC ViewDidLoad
Затем, когда вы нажмете на SecondVC, вы увидите, что есть только стрелка назад
источник
Если вы установите tintColor Of NavigationBar, добавьте пользовательское изображение кнопки «Назад» без заголовка, чтобы цвет оттенка отражал цвет изображения. Пожалуйста, перейдите по этой ссылке для документирования яблок.
https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/UIKitUICatalog/index.html#//apple_ref/doc/uid/TP40012857-UIView-SW7
источник
Проверьте этот ответ
Как изменить имя кнопки возврата UINavigationController?
установить
title
текстstring
с одним пробелом, как показано нижеНе хватает репутации, чтобы добавлять комментарии :)
источник
Я написал расширение, чтобы сделать это проще:
источник
Вы можете изменить заголовок на @ "" текущего ViewController на viewWillDisappear, и когда он снова появится, снова установите заголовок на то, что было раньше.
источник
В методе prepareForSegue: вашего первого ViewController вы устанавливаете заголовок этих представлений на @ "", поэтому при нажатии следующего представления будет отображаться предыдущий заголовок ViewController, который будет @ "".
Единственная проблема в том, что когда вы нажмете кнопку «Назад», ваше предыдущее представление не будет иметь заголовка, поэтому вы можете добавить его снова в viewWillAppear:
Мне не очень нравится это решение, но оно работает, и я не нашел другого способа сделать это.
источник
Чтобы добавить ответ Томаса С. выше, иногда ставить один пробел не получается, и вы должны продолжать добавлять пробелы.
Вы узнаете, что добились успеха, когда увидите «Элемент панели кнопок» под «Элементом навигации». Это в схеме документа (редактор-> Показать схему документа). Как только вы увидите изображение выше, вы можете удалить несколько пробелов и посмотреть, работает ли оно по-прежнему.
источник
Как и Кайл Бегеман, вы добавляете приведенный выше код в свой контроллер корневого представления. Все подчиненные контроллеры будут применены. Кроме того, добавив это в initWithCoder: метод, вы можете применить стиль для корневых контроллеров представления в xib, раскадровке или основанном на коде подходах.
источник