2013-12-16 7 views
0

Мне нужно изменить значение по умолчанию (которое уже было объявлено на моем AppDelegate) для UIBarButtonItem в одном ViewController.Невозможно изменить фон для UIBarButtonItem

Итак, в моем AppDelegate у меня есть:

UIImage *navBarItemBackground = [UIImage imageNamed:@"navbar_button_green"]; 
[[UIBarButtonItem appearance] setBackgroundImage:navBarItemBackground 
              forState:UIControlStateNormal 
               style:UIBarButtonItemStyleBordered 
              barMetrics:UIBarMetricsDefault]; 

И когда мне нужно восстановить фон по умолчанию для кнопки - я реализую в моем ViewController:

self.navigationItem.rightBarButtonItem = nil; 
UIBarButtonItem *rightBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Сохранить" style:UIBarButtonItemStyleBordered target:self action:@selector(clickOnSend:)]; 
[rightBarItem setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal style:UIBarButtonItemStyleBordered barMetrics:UIBarMetricsDefault]; 
self.navigationItem.rightBarButtonItem = rightBarItem; 

Но я думаю, что это Неправильно установить пустой файл в качестве изображения. Есть ли более простой способ реализовать это поведение? Благодаря!

ответ

1

Если вы хотите изменить только один или несколько UIViewController'sUIBarButtonItems BackgroundImage, вы бы лучше изменения в конкретных UIViewController х в последнем случае вы используете. в то время как [[UIBarButtonItem appearance] setBackgroundImage:forState:style:barMetrics:]; изменит все фоновые изображения UIBarButtonItems, что, возможно, не лучшее.

+0

Да, вторая часть кода помещается в отдельный viewController. Но мне нужно оставить эту кнопку по умолчанию для фона iOS6 и для всех остальных кнопок мне нужно изменить фон с внешним видом. – ShurupuS

+1

@ShurupuS, то вы просто передаете nil в параметр изображения, он должен работать. – chancyWu

+0

Да - он работает, просто попытался использовать это решение - нет кода выглядит немного проще. Благодаря! – ShurupuS

0

Вы должны изменить свой код на этот:

UIBarButtonItem * rightBarItem = [[UIBarButtonItem alloc] 
              initWithTitle: @"Сохранить" 
              style: UIBarButtonItemStyleBordered 
              target: nil action: nil]; 
UIImage *navBarItemBackground = [[UIImage imageNamed:@"navbar_button_green"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)]; 
[[UIBarButtonItem appearance] setBackgroundImage:navBarItemBackground 
               forState:UIControlStateNormal 
               barMetrics:UIBarMetricsDefault]; 

[self.navigationItem setBackBarButtonItem: rightBarItem]; 
+0

Мне нужно оставить по умолчанию только один барБайт в одном видеКонтроллер - другие кнопки должны быть изменены с внешним видом. – ShurupuS

+0

Примените этот код, чтобы изменить все ноты, и используйте специальный код без [UIBarButtonItem внешнего вида] для viewController, для которого требуется значение по умолчанию. –

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