UINavigationItem BackButtonItem не отображается

#ios4 #uibutton #uinavigationitem

#ios4 #uibutton #uinavigationitem

Вопрос:

Используя приведенный ниже код, я реализую свою собственную панель навигации. По какой-то причине, когда я запускаю свое приложение, ничего не отображается для кнопки назад (стрелка влево) на панели навигации. Однако, если я изменю код на leftBarButtonItem, кнопка действительно появится.

 // Draw Navigation Bar
UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[navigationBar setDelegate:self];

UINavigationItem *navigationItem = [[UINavigationItem alloc] init];

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                                style:UIBarButtonItemStylePlain
                                                               target:nil 
                                                               action:nil];
navigationItem.backBarButtonItem = backButton;
[navigationBar pushNavigationItem:navigationItem animated:NO];
[self.view addSubview:navigationBar];
[navigationBar release];
[backButton release];
  

Ответ №1:

backBarButtonItem Устанавливается родительским ViewController. Другими словами, он устанавливается не тем, ViewController на котором вы его видите, а тем, ViewController на что он указывает. Итак, если ваш ViewController является первым в строке, у него просто не будет кнопки возврата.

Кроме того, вы создаете панель навигации самостоятельно. Обычно это не так, UINavigationBar это не элемент пользовательского интерфейса, такой как кнопка или метка. Вы должны скорее использовать UINavigationController для обработки всех нажатий и всплывающих ваших ViewControllers .

Комментарии:

1. Я понимаю это, и обычно я бы реализовал панель навигации, как вы сказали. Однако в этом случае я программно создал SplitView, что означает, что мой splitViewController является UINavigationController. Что я хочу сделать, это скрыть панель навигации SplitView и создать уникальную панель навигации для моих левого и правого ViewControllers

Ответ №2:

Понял это:

 // Draw Navigation Bar
UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[navigationBar setDelegate:self];

UINavigationItem *navigationItem = [[UINavigationItem alloc] init];

UIButton *button = [UIButton buttonWithType:101];
// add selector
[button setTitle:@"Back" forState:UIControlStateNormal];

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

navigationItem.leftBarButtonItem = backButton;
[navigationBar pushNavigationItem:navigationItem animated:NO];
[self.view addSubview:navigationBar];
[navigationBar release];
[backButton release];