Вопрос по ios5, ios – IOS 5 изменить фон кнопки «Назад» в контроллере навигации на прозрачный

6

Я настроил строку заголовка контроллера навигации с фоновым изображением, но я действительно изо всех сил пытаюсь изменить цвет фона кнопки «Назад» на прозрачный, чтобы он соответствовал зеленой строке заголовка под ним. Я довольно новичок в разработке для 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   ответ
5

но вы можете создать свою собственную кнопку, чтобы заменить ее.

- (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

Похожие вопросы