Добавление кнопки "Назад" в панель навигации
Я добавил навигационную панель в UIViewController. Он отображается только из другого UIViewController. Я хотел бы иметь левую боковую кнопку, похожую на стрелку, точно так же, как и обычная кнопка назад на панели навигации. Кажется, я могу добавить кнопку бара через IB. Я предполагаю, что кнопка "Назад" должна быть добавлена программно. Любые предложения о том, как я должен это делать?
В настоящее время в RootController я нажимаю другой UIViewController (viewB), просто делая addSubView. В viewB, я хочу отобразить панель навигации. Приложение основано на представлении, а не на контроллере навигации.
Ответы
Ответ 1
Если вы используете контроллер навигации:
MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[[self navigationController] pushViewController:_myViewController animated:YES];
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.backBarButtonItem = _backButton;
[_backButton release], _backButton = nil;
[_myViewController release], _myViewController = nil;
Если вы не пользуетесь навигационным контроллером, посмотрите на элементы стиля Three20 для создания пользовательских кнопок на панели.
Ответ 2
Я сделал это следующим образом
В методе viewDidLoad У меня есть этот код:
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)];
navBar.delegate = self;
UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
[navBar pushNavigationItem:backItem animated:NO];
[backItem release];
UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"];
[navBar pushNavigationItem:topItem animated:NO];
topItem.leftBarButtonItem = nil;
[topItem release];
[self.view addSubview:navBar];
[navBar release];
Затем добавьте соответствие в протокол UINavigationBarDelegate в заголовке и реализуйте метод делегата следующим образом:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
//if you want to dismiss the controller presented, you can do that here or the method btnBackClicked
return NO;
}
Ответ 3
Другим подходом к решению этой проблемы является установка свойства items для панели навигации вместо последовательного нажатия элементов панели в стек навигационной панели:
//Define myFrame based on your needs
let navigationBar = UINavigationBar(frame: myFrame)
let backItem = UINavigationItem(title: "Back")
let topItem = UINavigationItem(title: "My Title")
navigationBar.setItems([backItem,topItem], animated: false)