0

我想向我的导航项添加一个自定义UIBarButtonItem。这个按钮将在我所有的视图控制器中可用。所以而不是将其添加到每个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]; 

如果我更换了相同的代码博客中任何的viewController的任何viewDidLoad并改变

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

通过:

[self.navigationItem setRightBarButtonItem:rightBarButtonItem]; 

它完美。 任何想法为什么?

+0

什么是导航?它是一个视图控制器? –

+0

nav是我的UINavigationController – Legnus

回答

3

为前者创建UIViewController的子类。​​,覆盖viewDidLoad方法,并在里面创建您的rightBarButtonItem并进行设置。然后让所有的控制器继承​​- 简单的OOP场景。

+1

谢谢你的回答!我用它为我的自定义导航控制器,但我忘了用它为我的UIViewController ... Thx再次提醒;)完美的作品! – Legnus

0

你不应该使用这个self.nav.navigationController因为navUINavigationController然后不要让.navigationController

只需使用[self.navigationItem setRightBarButtonItem:rightBarButtonItem];

相关问题