Как установить заголовок в leftBarButtonItem - PullRequest
2 голосов
/ 26 февраля 2012

У меня есть root ViewController и подробный ViewController.Когда я нажимаю на подробный ViewController, я получаю leftBarButtonItem с заголовком из корневого.Но я хочу, чтобы название было просто «Назад», не более того.Так как это сделать?

Это не поможет

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

Создать объект типа onBarButtonItem (например, 104 со стрелкой влево) и установить его значение leftBarButtonItem - ужасное решение.

Есть ли другой способ, кроме изменения заголовка rootViewController вручную перед нажатием?

Ответы [ 4 ]

7 голосов
/ 26 февраля 2012

Из документа Apple:

backBarButtonItem

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

@ свойство (неатомное, сохранение) UIBarButtonItem * backBarButtonItem Обсуждение

Когда этот элемент навигации находится сразу под верхним элементом в стек, навигационный контроллер получает кнопку возврата для панель навигации из этого элемента навигации. Когда это свойство равно нулю, элемент навигации использует значение в свойстве title для создания соответствующая кнопка возврата. Если вы хотите указать собственное изображение или заголовок для кнопки назад, вы можете назначить пользовательский элемент панели кнопок (с вашим пользовательским названием или изображением) вместо этого свойства . когда настраивая элемент панели кнопок, не назначайте для него настраиваемый вид; элемент навигации игнорирует пользовательские представления в кнопке задней панели в любом случае.

Таким образом, вы можете создать свой barButtonItem (например, – initWithTitle:style:target:action:) и назначить его этому свойству.

Кроме того, если вы хотите иметь собственное изображение для UIBarButtonItem (влево или вправо), я предлагаю вам создать расширение категории, как показано ниже:

//UIBarButtonItem+Extension.h    
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action;

//UIBarButtonItem+Extension.m    
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    button.titleLabel.textAlignment = UITextAlignmentCenter;

    [button setBackgroundImage:image forState:UIControlStateNormal];
    [button setTitle:title forState:UIControlStateNormal];
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem* barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return [barButtonItem autorelease];    
}

, а затем использовать его как

UIBarButtonItem* backBarButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"YoutImageName"] title:@"YourTitle" target:self action:@selector(doSomething:)];
6 голосов
/ 18 октября 2013

Я наконец разобрался со всеми морщинами в этом сегодня, и это проще, чем выше.

Текст кнопки «Назад» дочернего элемента основан на значениях, заданных в его родительском элементе. Это очевидное поведение, если подумать: если к контроллеру представления можно обратиться от двух родителей, текст кнопки «Назад» должен зависеть от того, кто его нажал.

Если текст всегда один и тот же:

  1. Выберите в редакторе родительского контроллера Элемент навигации в редакторе.
  2. Поместить текст в значение Кнопка Назад .

И вот так все готово. Когда этот контроллер представления отодвигается в сторону новым контроллером представления, этот новый контроллер представления получит этот текст в качестве заголовка.

Если текст динамический:

  1. Выберите в редакторе элемент навигации родительского контроллера в редакторе.
  2. Поместите некоторые текст в значение Back .
  3. Установите заголовок, когда он должен измениться в parent view controller: self.navigationItem.backBarButtonItem.title = dynamicText;

И снова все готово.

Для ясности, вы можете установить это в любое время в родительском контроллере представления. Отображается только при нажатии на другой контроллер вида.

Если вы не поместите текст в кнопку Back в конструкторе, процесс создания экземпляра контроллера представления не создаст self.navigationItem.backBarButtonItem, и вы не сможете установить заголовок nil объект. Я полагаю, что именно отсюда и возникает путаница вокруг этого.

Конечно, вы можете создать это во время выполнения, но если вы уже выполняете большую часть своей работы в раскадровке / кончике, проще позволить декодеру сделать это за вас.

Если вам более интересно это, я просто написал пост в блоге на эту тему. У него есть больше деталей .

1 голос
/ 26 февраля 2012
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] init];
backButtonItem.title = NSLocalizedString(@"Back", nil);
self.navigationItem.backBarButtonItem = backButtonItem;
0 голосов
/ 27 января 2015

у меня работает:

[self.navigationItem.leftBarButtonItem setTitle:@"Back"];

(изображение со стрелкой назад и произвольный текст)

...