Подтвердить что ты не робот

Добавление UIBarButtonItem программно в UINavigationBar

Я упал в 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, поместить в него кнопку и setItems для NavigationBar?

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

4b9b3361

Ответ 1

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

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

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

self.navigationItem.backBarButtonItem = backButton;

к

self.navigationItem.leftBarButtonItem = backButton;

Ответ 2

сделать такой вызов с контроллера вида

{
    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];
}

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

Ответ 3

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

//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

Ответ 4

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

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