Подкласс UINavigationController с пользовательской кнопкой «Назад»

Я знаю, что могу установить пользовательскую кнопку «Назад» из самого контроллера представления, например:

- (void)setBackButton
{
    UINavigationBar* navBar = self.navigationController.navigationBar;
    UIButton* backButton = [navBar backButtonWith:[UIImage imageNamed:@"navigationBarBackButton.png"] 
                                        highlight:nil 
                                     leftCapWidth:14.0];

    [backButton addTarget:self action:@selector(backButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
}

- (void)backButtonTapped:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}  

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

Но мой вопрос: могу ли я создать подкласс самого UINavigationCotroller и установить его левую кнопку на панели навигации для этой пользовательской кнопки?


person Eyal    schedule 07.06.2012    source источник


Ответы (2)


Правильный способ сделать это — использовать UIAppearance< /а>

Он предоставляет методы для UIBarButtonItem, такие как

- (void)setBackButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics

а также

- (void)setBackButtonBackgroundVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics

person Joshua Weinberg    schedule 07.06.2012
comment
Да, почему вы все еще поддерживаете что-то меньшее? - person Joshua Weinberg; 07.06.2012
comment
Нет поддержки стиля кнопки «Назад» в ‹ iOS5, настройка левой кнопки имеет небольшие отличия в поведении. - person Joshua Weinberg; 07.06.2012
comment
какие различия в поведении вы имеете в виду? и как вы думаете, что мне делать, если я поддерживаю iOS 4? - person Eyal; 08.06.2012
comment
Различия в анимации, элементы левой кнопки панели будут скользить вместе с навигацией, элементы заднего плана останутся на месте. - person Joshua Weinberg; 09.06.2012
comment
Ты прав, я не замечал этого до сих пор.. Как ты думаешь, что мне здесь делать? Должен ли я проверить версию устройства и использовать UIAppearance, если iOS 5, или мне все равно следует использовать мою текущую реализацию с BasicViewController и пользовательской кнопкой «Назад»? - person Eyal; 10.06.2012

Нет. Было бы лучше иметь собственный UIViewController, который обрабатывает такое поведение.

person Christian    schedule 07.06.2012