Добавление UIBarButtonItem программно в UINavigationBar - PullRequest
19 голосов
/ 17 июля 2011

Я бросил в UINavigationBar в UIInterfaceBuilder.Я представляю этот вид модально и просто хочу, чтобы UIBackBarButton вернулся к моему последнему виду.У меня есть розетка и собственность на это UINavigationBar заявлено.Я думал, что в моем методе viewDidLoad я мог бы создать UIBackButton следующим образом:

UIBarButtonItem *backButton = 
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStyleBordered 
                                              target:self 
                                              action:@selector(goBack)];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

Но я не вижу UIBackBarButtonItem на UINavigationBar.Я думаю, что я делаю что-то не так здесь, так как я не думаю, что мой UINavigationBar знает, что я пытаюсь добавить это UIBackBarButtonItem таким образом.Должен ли я создать NSArray, вставить в него кнопку и установить вместо нее элементы навигации?

Я запутался в том, как работает свойство navigationItem и setItems UINavigationBar.Любая помощь будет оценена.Спасибо!

Ответы [ 4 ]

16 голосов
/ 17 июля 2011

Вы пытаетесь установить элемент кнопки «Назад» в модальном представлении, которое не добавляет backBarButtonItem.Это то, что заставляет кнопку (или любую другую кнопку назад) не показывать.BackBarButtonItem в основном предназначен для использования с контроллерами с принудительным представлением, для которых добавлена ​​кнопка «Назад» от родителя (следующий элемент ниже) при нажатии нового контроллера представления (верхний элемент). Документация Apple UINavigationItem гласит:

Когда этот элемент является задним элементом панели навигации - когда это следующий элемент под верхним элементом - он может быть представлен каккнопка назад на панели навигации.Используйте это свойство, чтобы указать кнопку возврата.Цель и действие элемента кнопки задней панели, который вы установили, должны быть равны нулю.Значением по умолчанию является элемент панели кнопок, отображающий заголовок элемента навигации.

Чтобы получить кнопку «Назад» с левой стороны, как вы хотите, попробуйте изменить

self.navigationItem.backBarButtonItem = backButton;

на

self.navigationItem.leftBarButtonItem = backButton;
12 голосов
/ 18 июля 2011

при совершении такого вызова из контроллера представления

{
    NextViewController* vcRootView = [[NextViewController alloc] initWithNibName:@"NextView" bundle:[NSBundle mainBundle]];
    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:vcRootView];
    [vcRootView release];

    [self.navigationController presentModalViewController:navController animated:YES];
    [navController release];    

}

представит NextViewController как модальное представление в вызывающем представлении, и NextViewController будет иметь навигационный контроллер для него.

ВФайл реализации NextViewController, все что вам нужно, это

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self 
                                                                  action:@selector(barButtonBackPressed:)];
    self.navigationItem.leftBarButtonItem = backButton;
    [backButton release];
}


-(void)barButtonBackPressed:(id)sender{
    [self dismissModalViewControllerAnimated:YES];
}

, чтобы иметь кнопку возврата, чтобы закрыть модальное представление.Надеюсь, это поможет.

8 голосов
/ 07 марта 2014

Используйте приведенный ниже фрагмент кода:

//Add button to NavigationController
UIBarButtonItem *backButton = 
 [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@“back”, @"")
                                  style:UIBarButtonItemStylePlain 
                                 target:self 
                                 action:@selector(goBack)];

self.navigationItem.leftBarButtonItem = backButton;

//Perform action on back Button
- (void) goBack {    // Go back task over-here
}

Доступны различные типы стилей:

UIBarButtonItemStylePlain, UIBarButtonItemStyleBordered, UIBarButtonItemStyleDone
3 голосов
/ 08 февраля 2016

Вы можете использовать эти сеттеры без создания нового UIBarButtonItem:

[self.navigationItem.leftBarButtonItem setAction:@selector(doBackButton:)];
[self.navigationItem.leftBarButtonItem setTarget:self];
...