Кнопка Назад на UINavigationController - PullRequest
1 голос
/ 27 сентября 2010

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

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Foo" style:UIBarButtonItemStyleBordered target:self                                                          action:@selector(foo:)]; 
self.navigationItem.backBarButtonItem=backButton;

если вместо backBarButtonItem я пишу leftBarButtonItem, отображается кнопка. Моя проблема в том, что мне нужна кнопка со стрелкой, как нормальная кнопка назад. Возможно ли это?

Ответы [ 5 ]

1 голос
/ 11 апреля 2011

Обычно это работает из коробки, но иногда с модальными видами / листами действий это может понадобиться.Непосредственно перед тем, как создать экземпляр вашего viewcontroller и поместить его в стек навигационного контроллера, попробуйте

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"Back" style: UIBarButtonItemStyleBordered target: nil action: nil];
    [[self navigationItem] setBackBarButtonItem: newBackButton];
    [newBackButton release];

    DetailViewController *detailVC = [[DetailViewController alloc]init];
    [self.navigationController pushViewController:detailVC animated:YES];
    [detailVC release];
0 голосов
/ 17 декабря 2012

В Apple Document написано:

Когда этот элемент навигации находится сразу ниже верхнего элемента в стеке , контроллер навигации выводит кнопку возврата для панели навигации из этого элемента навигации.

Итак, если ваш элемент навигации находится в верхней части стека (как мы здесь говорим), вы не можете добавить кнопку «Назад» к контроллеру навигации, просто потому, что нет места, где он может вернуться к нему, потому что это верхний элемент в стек.

Обновленный ответ: После того, как я искал, я нашел работу, чтобы сделать кнопку возврата в вашем корневом контроллере в Navigation controller по этим ссылкам

Все очень просто:)

[self.navigationItem setHidesBackButton:YES animated:YES];
UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)];

self.navigationItem.leftBarButtonItem = backButton;
0 голосов
/ 27 сентября 2010

Конечно, вы можете сделать это. Вам просто нужно изменить заголовок leftBarButtonItem обратно тогда вы получите красивую кнопку со стрелкой влево с заголовком назад. Затем вы просто изменяете селектор, чтобы фактически выполнять метод при нажатии кнопки. Итак @selector(foo:)

Вот некоторый код о том, как добиться выше:

self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;
self.navigationItem.leftBarButtonItem.title = @"Back";
self.navigationItem.leftBarButtonItem.target = self;
self.navigationItem.leftBarButtonItem.action = @selector(endTextEnteringButtonAction:);

Дайте мне знать, если это поможет.

0 голосов
/ 28 сентября 2010

или вы также можете сделать следующее - я предпочитаю этот метод. Я получил это из другого поста.

Используйте следующий PSD, полученный из http://www.teehanlax.com/blog/?p=447

http://www.chrisandtennille.com/pictures/backbutton.psd

Затем я просто создаю пользовательский UIView, который я использую в свойстве customView элемента панели инструментов.

Хорошо работает для меня.

Надеюсь, это немного поможет

0 голосов
/ 27 сентября 2010

Я не думаю, что вы можете сделать это в первом представлении NavigationController, потому что вам нужно установить свойство backBarButtonItem в родительском контроллере, прежде чем нажать на дочерний контроллер. Кроме того, согласно Apple Docs , цель и действие backBarButtonItem должны быть nil.

Этот вопрос о создании кнопки со стрелкой влево на панели UIToolbar может дать вам некоторые идеи о том, как можно обойти это, используя пользовательское изображение (для leftBarButtonItem).

...