Як змінити текст на кнопці "Назад"


90

За замовчуванням кнопка "Назад" використовує як текст на ньому заголовок контролера перегляду. Чи можу я змінити текст на кнопці "Назад", не змінюючи заголовка контролера перегляду? Мені це потрібно, оскільки у мене є контролер перегляду, заголовок якого занадто довгий для відображення, і в цьому випадку я хотів би відобразити лише "Назад" як підпис для кнопки "Назад".

Я спробував наступне, що не спрацювало:

self.navigationItem.leftBarButtonItem.title = @"Back";

Дякую.


3
Майте на увазі, що кнопки "Назад" мають назви не просто так. Змінюючи заголовок на "Назад", ви позбавляєте користувача інформації про те, до чого повертається кнопка.
— Саймон

Відповіді:


167

Спробуйте

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

Я виявив це, переглянувши документи backBarButtonItem у документах Apple для UINavigationItem .


1
На жаль, зараз у мене немає можливості протестувати це, але чи застосовується це лівобічна форма вбудованих кнопок Назад, чи зберігає за замовчуванням прямокутну форму UIBarButtonItem?
— Марко

Я насправді не впевнений. Я припускаю, що це просто збереже форму кнопки "Назад" автоматично, оскільки ви встановлюєте властивість backButton, але вам доведеться протестувати її, щоб дізнатись. Мені теж цікаво.
— Marc W

2
Так, це спрацювало! Це так змінює заголовок, і так, зберігає форму. Дякуємо за допомогу.
— Ілля Суздальницький

1
Примітка: кнопка "Назад" утримується двічі [1x від alloc, 1x від утримання властивості]. Однак якщо ви не зміните кнопку назад, це фактично нешкідливо.
— Келвін

29
Див. Коментар Марко нижче - вам слід зателефонувати це на контролері, який збирається штовхнути щось нове, а не на тому, що контролер штовхається.
— Білл

97

Підхід Марка У спрацював чудово, коли я з’ясував, до якого контролера його застосувати: той, що перейменовується, а не той, що зверху. Отже, якщо це навігаційний стек:

(bottom)  ControllerA -> ControllerB  (top)

... і ви хочете дати коротший заголовок для ControllerA на кнопці назад, що відображається, коли ControllerB знаходиться зверху , ви застосовуєте зміну властивості до ControllerA .

Отже, це більше в контексті self.title, а не так, як інші налаштування лівої / правої панелі кнопок.


13
Це дуже важлива деталь.
— Білл

4
wcochran, він працює з розкадровкою, просто переконайтеся, що ви встановили кнопку Назад батьківського контролера. Отже, якщо у вас є контролер A, який вказує на контролер B (за допомогою програми розкадрувань), то для того, щоб налаштувати текст для кнопки Назад у контролері B, вам потрібно встановити властивість "Кнопка" Назад "для контролера A в редакторі розкадрування.
— перервати

Дякую Марко. Що я відчув у цьому питанні, так це те, що всі намагаються відповісти (і відповісти правильно), але не на питання, яке задається. Ви в основному вдарили цвях в голову і правильно. Дякую за це!
— theiOSguy

+1 для важливої ​​деталі. Наведена вище відповідь не буде працювати для вас, якщо ви не зрозумієте ЦЮ відповідь.
— baptzmoffire

Ви маєте рацію, до клавіатури на новому MacBook One трохи важко звикнути.
— Mason G. Zhwiti

48

Ви можете зробити це в розкадруванні. Знайдіть контролер перегляду, до якого ви хочете повернутися (той, що має довгий заголовок), виберіть його пункт навігації та відкрийте Інспектор атрибутів (Alt + Cmd + 4), вставте власний заголовок кнопки Назад.

введіть тут опис зображення


Це було саме те, що мені потрібно, оскільки я хотів, щоб усі кнопки "Назад" мали текст "Назад" замість попередніх заголовків контролера.
— Дейв

8
Зазначимо, текст кнопки "Назад" встановлюється на поданні, з якого було висунуто наступний контролер, а не на контролері перегляду, який ви зараз показали.
— Дарбіо

Це хороше просте рішення, але, будь ласка , не перейменовуйте всі свої кнопки "Назад" у "Назад", це суперечить HIG від Apple і перемагає частину призначення кнопки "Назад". :(
— Семюель Гудвін

Працював чудово. Тільки не забудьте ЗБЕРЕГТИ файл Storyboard. Моя перша спроба не спрацювала, бо я не помітив, що Розкадровка не зберегла! І так, ви змінюєте кнопку НАЗАД на контролері перегляду, з якого ви приїжджаєте!
— EricWasTaken

Дуже добре, але що, якщо я хочу залишити лише стрілку, без тексту? :)
— Юрій Василенко

40

Дякую Марко ... що мені допомогло ...

Ось що я зробив.

Якщо ви використовуєте tableView для переходу до різних подань ..., введіть код:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

У вашому didSelectRowAtIndexPathметоді ... першого контролера ... контролера А.

Коли ви переходите до контролера B, кнопка матиме заголовок "Назад".


1
Дякую тобі дорогий @Ben. Це було саме те, що я шукав :).
— Арслан,

12

Кнопка "Назад" витягує текст із заголовка батьківського контролера подання.

У батьківському контролері перегляду (контролер перегляду, який з’являється, коли ви натискаєте кнопку назад), встановіть його власний заголовок як бажаний текст на кнопці назад.

Наприклад, припустимо, у нас є RootViewControllerклас. Коли ми клацаємо клітинку в поданні таблиці, ми натискаємо екземпляр SecondViewController. Ми хочемо, щоб кнопка "Назад" SecondViewControllerекземпляра читала "Домашня сторінка".

у viewDidLoadметоді RootViewController.m :

self.title = @"Home";

у viewDidLoadметоді SecondViewController.m :

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    

Якщо ви хочете, щоб ваша кнопка "Назад" читала "Назад", встановіть заголовок батьківського контролера подання на @"Back";


10

Для мене це працює краще. Спробуйте:

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

1
Чудова відповідь спрацювала ідеально. його слід позначити як виключений.
— Мухаммед Різван

9

Якщо ви використовуєте розкадрування:

  1. Відкрийте StoryBoard
  2. У вікні "Контур документа" знайдіть ViewController, до якого потрібно повернутися
  3. Клацніть на елемент навігації цього ViewController
  4. У Провіднику атрибутів змініть значення кнопки Назад на вашу власну плитку

Це все, насолоджуйтесь ...


5

А в MonoTouch працюють такі роботи (у ViewDidLoad батьківського контролера):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);

3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

Це спрацювало для мене.


3

У батьківському контролері подання встановіть кнопку назад, коли подання завантажується:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Зверніть увагу, що нам не потрібно autoreleaseдодавати останню версію iOS наприкінці.

Сподіваюся, це допомагає!


1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

Це працює для мене. Ви можете замінити "назад" чимось іншим.


Відповідаючи кодом, завжди пояснюйте, у чому проблема із наданим кодом та як ваш код вирішує проблему.
— Лукаш Кнут

1

Цей працював у мене, якщо ти не хочеш мати титул!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

1
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

0

Я нарешті зрозумів, чому спочатку ці відповіді для мене не працювали. Я встановив заголовок у розкадруванні. Коли я встановлюю заголовок на коді. це працює!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

У майбутньому ви можете захотіти робити такі публікації як коментарі до відповіді, яка вам не підходила.
— Кіт Смайлі

0

Моє рішення полягало в тому, щоб встановити заголовок, коли контролер подання перенесено в стек навігації, і скинути його за допомогою методу делегатів, перш ніж push vc закриється:

Тому я поміщаю зміну заголовка у виклику контролера перегляду, коли натискаю інший контролер перегляду, наприклад:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

та у функції делегування зворотного виклику (яку я викликаю у viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}

0

Якщо ви хочете не лише змінити текст кнопки "Назад" і залишити оригінальну фігуру зі стрілкою вліво, але і щось зробити, коли користувач натисне кнопку "Назад", я рекомендую вам оглянути мій " CustomNavigationController ".


0

// Ви можете досягти цього, встановивши заголовок у попередньому контролері перегляду, як показано нижче

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}

0

Щоб змінити заголовок кнопки повернення, зверніться до коду нижче

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.