Конфигурирование backBarButtonItem элемента навигации View Controller в раскадровке - PullRequest
7 голосов
/ 22 марта 2012

Достаточно просто перетащить элементы кнопок панели на панель навигации контроллера представления в раскадровке в Интерфейсном Разработчике.Таким образом, вы можете установить выходы leftBarButtonItem и rightBarButtonItem элемента навигации контроллера вида.Но есть также выход backBarButtonItem, и совсем не очевидно, как его настроить.Как установить пользовательский элемент кнопки задней панели с помощью Interface Builder?

Ответы [ 4 ]

18 голосов
/ 27 марта 2012
  • Выберите контроллер вида, элементы навигации которого вы хотите изменить.Черная полоса, отображающая идентификатор контроллера представления, превращается в обозначенный значком лоток объектов, на которые оно ссылается.

  • Перетащите элемент панели кнопок из библиотеки объектов в лоток.

Storyboard view of a navigation controller and subordinate table view controller

  • Щелкните правой кнопкой мыши на элементе навигации контроллера представления в панели основных объектов с левой стороны.Подключите вновь добавленную кнопку в качестве выхода backBarButtonItem элемента навигации.

Interface Builder screenshot illustrating how to wire up the back bar button outlet

  • Выберите кнопку панели и настройте ее любым способом, который вы выберете с помощьюИнспектор атрибутов.

Screenshot of the attributes inspector in Interface Builder showing options for the back bar button item

16 голосов
/ 09 декабря 2012

Как заметил @wcochran выше, при работе с viewControllers, помещенными в стек навигационного контроллера, выход backBarButtonItem уже подключен и не может быть изменен.Кроме того, выбор навигационного элемента дочернего ВК и изменение текста кнопки «Назад» в IB не дает ожидаемого результата.

Теперь вы можете подумать, что замена backBarButtonItem дочернего ВК решит проблему, но это не так.,Смущает, что если вы хотите установить заголовок кнопки «Назад» дочернего VC, вы должны установить заголовок кнопки «Назад» для его parent (!), Например:

- (void)viewWillAppear:(BOOL)animated // in the parent VC!
{
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
    self.navigationItem.backBarButtonItem = backButton;
}

Это не будет ничего делать на родительском VC.На самом деле, если родителем является RootViewController для navigationController, кнопка возврата вообще не будет.Но потомок унаследует (или заберет) созданную вами кнопку возврата.

Это относится только к непосредственному дочернему VC, поэтому, если вы хотите сохранить метку вниз в стеке navigationController, вам нужно установитьэто на каждого родителя.

Спасибо @wiliz в #iphonedev за объяснение мне.

3 голосов
/ 05 октября 2013

Как отмечалось выше @AdamBlock, вы должны установить все в родительском VC.

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

  • Выберите родительский ВК
  • Выберите элемент навигации
  • Открыть инспектор атрибутов
  • Установить заголовок для кнопки «Назад».
1 голос
/ 27 марта 2012

В Интерфейсном Разработчике вы можете изменить заголовок кнопки Назад элемента навигации.

Программно вы можете установить пользовательскую кнопку возврата в методе viewDidLoad контроллера представления. В этом примере мы устанавливаем изображение кнопки для изображения с именем «customImage.png»:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStyleBordered target:self action:nil];

    // Set custom image here
    backButton.image = [UIImage imageNamed:@"customImage.png"];
    self.navigationItem.backBarButtonItem = backButton;
}
...