2012-05-08 3 views
6

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

} 

EDIT: После того, как делать немного исследований мне удалось получить то, что я хотел , Вот код, чтобы изменить фоновое изображение для кнопки возврата:

UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Приведенный выше код добавляет изображение для всех задних кнопок в навигации контроллера.

+0

Ваше решение не будет работать, если навигационный контроллер представлен в контроллере popover. Причина этого в том, что фон фона кнопки фона и панели заднего фона в popover рисуется по-разному. –

ответ

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]; 
    } 
} 
+0

благодарит за ответ! Он работает, но только для одного уровня глубины, а не для каждой точки зрения. Но нет ли другого встроенного? благодаря! –

+3

нет другого способа, о котором я знаю. Если вы хотите включить это во все ваши контроллеры, создайте класс «BaseViewController», который реализует это в методе 'viewDidLoad' и использует его как базовый класс для всех ваших контроллеров представлений в приложении. Просто будьте осторожны при переопределении viewDidLoad в ваших основных контроллерах представления, чтобы вызвать '[super viewDidLoad]'. – adig

+0

спасибо adig! Это полезно! –

Смежные вопросы