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


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.