Добавление кнопки возврата на панель навигации - PullRequest
10 голосов
/ 17 мая 2010

Я добавил панель навигации в UIViewController. Отображается только из другого UIViewController. Я хотел бы иметь левую боковую кнопку возврата, которая имеет форму, похожую на стрелку, так же, как обычная кнопка назад на панели навигации. Кажется, я могу только добавить кнопку бара через IB. Я предполагаю, что кнопка возврата должна быть добавлена ​​программно. Любые предложения о том, как я должен это сделать?

В настоящее время в RootController я помещаю другой UIViewController (viewB), просто выполняя addSubView. В viewB я хочу отобразить панель навигации. Приложение основано на просмотре, а не на контроллере навигации.

Ответы [ 3 ]

13 голосов
/ 17 мая 2010

Если вы используете навигационный контроллер:

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;

Если вы не используете контроллер навигации, посмотрите на * * * * * * * * * * * * * * * * *, чтобы создать пользовательские кнопки панели.

7 голосов
/ 26 октября 2011

Я сделал это следующим образом

В методе 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;
}
0 голосов
/ 28 июня 2016

Другой подход к решению этой проблемы - установить свойство 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)
...