Невозможно изменить фон для UIBarButtonItem в отдельном контроллере представления

в моем делегате приложения:

UIImage *navBarArrowItemBackground = [UIImage imageNamed:@"tabbar_button_back"];
[UIBarButtonItem appearance] setBackButtonBackgroundImage:navBarArrowItemBackground
                                                          forState:UIControlStateNormal
                                                        barMetrics:UIBarMetricsDefault];

и в отдельном контроллере представления:

UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self
                                                                      action:nil];
[backButton setBackgroundImage:[UIImage imageNamed:@"tabbar_button_back_gray"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.navigationItem setBackBarButtonItem:backButton];

Таким образом, на контроллерах дочернего представления заголовок кнопки «Назад» изменен, но фон берется из внешнего вида в appDelegate. Мне нужен собственный фон для одного контроллера представления. Как я могу это решить?

изменить № 1:

теперь appDelegate выглядит так:

UIImage *navBarArrowItemBackground = [UIImage imageNamed:@"tabbar_button_back"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:navBarArrowItemBackground
                                                          forState:UIControlStateNormal
                                                        barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearanceWhenContainedIn:[SettingsListViewController class], nil] setBackButtonBackgroundImage: [UIImage imageNamed:@"tabbar_button_back_gray"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

person ShurupuS    schedule 27.11.2013    source источник
comment
проверьте, что ваша панель навигации не должна быть нулевой.   -  person βhargavḯ    schedule 27.11.2013


Ответы (1)


Вы можете добиться этого, добавив ограничение к внешнему виду следующим образом:

[UIBarButtonItem appearanceWhenContainedIn:[YourOtherVC class], nil] setBackButtonBackgroundImage:navBarArrowItemBackground
                                  forState:UIControlStateNormal
                                barMetrics:UIBarMetricsDefault];

Ваш код должен выглядеть следующим образом:

UIImage *navBarArrowItemBackground = [UIImage imageNamed:@"tabbar_button_back"];
[[UIBarButtonItem appearanceWhenContainedIn:[SettingsListViewController class], nil] setBackButtonBackgroundImage: [UIImage imageNamed:@"tabbar_button_back_gray"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
person Vinay Jain    schedule 27.11.2013
comment
хорошее решение, но не помогает - фон тот же.. Не могу понять, что не так.. - person ShurupuS; 27.11.2013
comment
Используйте следующий код: UIImage *navBarArrowItemBackground = [UIImage imageNamed:@tabbar_button_back]; [[Внешний вид UIBarButtonItemWhenContainedIn:[SettingsListViewController class], nil] setBackButtonBackgroundImage: [UIImage imageNamed:@tabbar_button_back_gray] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - person Vinay Jain; 27.11.2013
comment
Не пишите оба заявления. - person Vinay Jain; 27.11.2013
comment
Теперь во всех контроллерах представлений есть фон по умолчанию. - person ShurupuS; 27.11.2013