2013-07-03 2 views
2

Использование этого метода для изменения названия и заднего фона задней кнопки навигации. Название изменено, но кнопка остается чернойИзменение фоновой картинки кнопки заднего фона

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topBarbackground.png"] forBarMetrics:UIBarMetricsDefault]; 

    UIBarButtonItem *backButton = [UIBarButtonItem new]; 
    [backButton setBackgroundImage:[UIImage imageNamed:@"backButton.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [backButton setTitle:NSLocalizedString(@"Back", nil)]; 
    [[self navigationItem] setBackBarButtonItem:backButton]; 
} 

Что это за правильный способ?

+0

Try ниже код ... – Jitendra

+0

Дубликат вопрос: http://stackoverflow.com/ вопросы/10496666/КСН-5 с изменением-фон в спине кнопки в навигационном-контроллере к прозрачному – Mrunal

ответ

2

Используйте либо setImage или setBackButtonBackgroundImage потому setBackgroundImage не имеет никакого эффекта:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topBarbackground.png"] forBarMetrics:UIBarMetricsDefault]; 

    UIBarButtonItem *backButton = [UIBarButtonItem new]; 
    // Put the image inside the button 
    [backButton setImage:[UIImage imageNamed:@"backButton.png"]; 
    [backButton setTitle:NSLocalizedString(@"Back", nil)]; 
    [[self navigationItem] setBackBarButtonItem:backButton]; 
} 

или

{ 
    [super viewDidLoad]; 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topBarbackground.png"] forBarMetrics:UIBarMetricsDefault]; 

    UIBarButtonItem *backButton = [UIBarButtonItem new]; 
    // Use the image as the button (like custom button) 
    [backButton setBackButtonBackgroundImage:[UIImage imageNamed:@"backButton.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [backButton setTitle:NSLocalizedString(@"Back", nil)]; 
    [[self navigationItem] setBackBarButtonItem:backButton]; 
} 
0
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[backButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchUpInside]; 
backButton.frame = kBarBackButtonFrame; 
[backButton setExclusiveTouch:YES]; 
[backButton setBackgroundImage:[UIImage imageNamed:NAV_BAR_BACK_DEFAULT_BUTTON] forState:UIControlStateNormal]; 
[backButton setBackgroundImage:[UIImage imageNamed:NAV_BAR_BACK_DEFAULT_BUTTON] forState:UIControlStateHighlighted]; 
[backButton setBackgroundImage:[UIImage imageNamed:NAV_BAR_BACK_DEFAULT_BUTTON] forState:UIControlStateSelected]; 
[backButton setTitle:NSLocalizedString(@"Back", nil) forState:UIControlStateNormal]; 
backButton.titleLabel.font = [UIFont systemFontOfSize:kBarBackButtonTitleFontSize]; 
[backButton setTitleColor:kBackButtonTitleColor forState:UIControlStateNormal]; 

UIBarButtonItem *backButtonHolder = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

self.navigationItem.rightBarButtonItem = backButtonHolder; 

Имейте в виду, что каждый UIViewController в стеке имеет свою собственную navigationItem, поэтому лучшим решением было бы сделать подкласс UIViewController, и каждый UIViewController вы используете, должны расширить предыдущий класс. Я уверен, что есть лучшие решения, но это тот, который я использую.

- (void)popViewControllerWithAnimation { 
[self.navigationController popViewControllerAnimated:YES]; 
}