0

Я пытаюсь добавить пользовательский UIBarButtonItem к моему navigationItem. Эта кнопка будет доступна во всех моих контроллерах. поэтому вместо того, чтобы добавлять его к каждому методу viewDidLoad в каждом viewDidLoad, я пытаюсь добавить его в мое приложение. Класс делегата в отдельном методе, который я вызову в методе viewDidLoad. Вот мой код:Как добавить пользовательский элемент uibarbuttonItem в элемент навигации во всех диспетчерах просмотра?

UIImage* image = [UIImage imageNamed:@"some-header-icon.png"]; 
CGRect frame = CGRectMake(0,0,image.size.width,image.size.height); 
UIButton* hellBtn = [[UIButton alloc] initWithFrame:frame]; 
[hellBtn setBackgroundImage:image forState:UIControlStateNormal]; 
[hellBtn setShowsTouchWhenHighlighted:NO]; 
[hellBtn addTarget:self action:@selector(goToHell) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem* rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:hellBtn]; 
[self.nav.navigationController.navigationItem setRightBarButtonItem:rightBarButtonItem]; 
[hellBtn release]; 
[rightBarButtonItem release]; 

, если я заменю один и тот же код блога в любом viewDidLoad любого ViewController и изменить

[self.nav.navigationController.navigationItem setRightBarButtonItem:rightBarButtonItem]; 

By:

[self.navigationItem setRightBarButtonItem:rightBarButtonItem]; 

Он отлично работает. Любая идея Почему?

+0

что нав? это viewcontroller? –

+0

nav - мой UINavigationController – Legnus

ответ

3

Создать подкласс UIViewController для. UIViewControllerBase, переопределите метод viewDidLoad и внутри его создайте свой rightBarButtonItem и установите его. Затем сделайте все ваши контроллеры наследуемыми UIViewControllerBase - простой сценарий ООП.

+1

Спасибо за ваш ответ! Я использовал это для своего настраиваемого контроллера навигации, но я забыл использовать его для моего UIViewController ... Thx снова для напоминания;) отлично работает! – Legnus

0

Вы не должны использовать этот self.nav.navigationController поскольку nav является UINavigationController то не получите .navigationController

[self.navigationItem setRightBarButtonItem:rightBarButtonItem]; Просто используйте