Вопрос по ios5, ios – IOS 5 изменить фон кнопки «Назад» в контроллере навигации на прозрачный
Я настроил строку заголовка контроллера навигации с фоновым изображением, но я действительно изо всех сил пытаюсь изменить цвет фона кнопки «Назад» на прозрачный, чтобы он соответствовал зеленой строке заголовка под ним. Я довольно новичок в разработке для iOS. Кто-нибудь может подсказать, что можно сделать?
Вот код, который я использовал для изменения строки заголовка контроллера навигации, на случай, если это поможет:
<code>- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) { UIImage *image = [UIImage imageNamed:@"greenbar.png"]; [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; } //change back button image } </code>
РЕДАКТИРОВАТ: После небольшого исследования мне удалось получить то, что я хотел. Вот код для изменения фонового изображения для кнопки «Назад»:
<code> UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; </code>
Приведенный выше код добавляет изображение ко всем кнопкам «Назад» в контроллере навигации.
Ваше решение не будет работать, когда навигационный контроллер представлен в поповерном контроллере. Это связано с тем, что фон панели навигации и фон кнопки задней панели в всплывающем окне отображаются по-разному.
Tuyen Dinh
1
ответ
но вы можете создать свою собственную кнопку, чтобы заменить ее.
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
UIImage *image = [UIImage imageNamed:@"greenbar.png"];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
// [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
}
//change back button image
if(self.navigationController.viewControllers.count > 1) {
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside];
backButton.frame = CGRectMake(0.0f, 0.0f, 64.0f, 41.0f);
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = backButtonItem;
}
}
- (void) didTapBackButton:(id)sender {
if(self.navigationController.viewControllers.count > 1) {
[self.navigationController popViewControllerAnimated:YES];
}
}
нет другого способа, о котором я знаю. Если вы хотите включить это во все ваши контроллеры представления, создайте
BaseViewController
класс, который реализует это наviewDidLoad
метод и использовать его в качестве базового класса для всех ваших контроллеров представления в приложении. Просто будьте осторожны при переопределении viewDidLoad в контроллерах основного вида, чтобы вызвать[super viewDidLoad]
.
adig
Спасибо за ответ! Это работает, но только для одного уровня и не для всех. Но нет ли другого встроенного способа? Благодарность
Kite Runner
спасибо Adig! Это полезно!
Kite Runner
Похожие вопросы
Ваше решение не будет работать, когда навигационный контроллер представлен в поповерном контроллере. Это связано с тем, что фон панели навигации и фон кнопки задней панели в всплывающем окне отображаются по-разному.